Applies to 150 22 Sharing File Systems with NFS Abstract The Network File System NFS is a protocol that allows access to files on a server ima a manner very similar to accessing local files 221 Overview 222 Installing NFS Server 223 Configuring NFS Server 224 Configuring Clients 225 For More Information 221 Overview The Network File System NFS is a standardized wellproven and widely supported network protocol that allows files to be shared between separate hosts The Network Information Service NIS can be used to have a centralized user management in the network Combining NFS and NIS allows using file and directory permissions for access control in the network NFS with NIS makes a network transparent to the user In the default configuration NFS completely trusts the network and thus any machine that is connected to a trusted network Any user with administrator privileges on any computer with physical access to any network the NFS server trusts can access any files that the server makes available Often this level of security is perfectly satisfactory such as when the network that is trusted is truly private often localized to a single cabinet or machine room and no unauthorized access is possible In other cases the need to trust a whole subnet as a unit is restrictive and there is a need for more finegrained trust To meet the need in these cases NFS supports various security levels using the Kerberos infrastructure Kerberos requires NFSv4 which is used by default For details see Book Security Guide Chapter 6 Network Authentication with Kerberos The following are terms used in the YaST module Exports A directory exported by an NFS server which clients can integrate it into their system NFS Client The NFS client is a system that uses NFS services from an NFS server over the Network File System protocol The TCPIP protocol is already integrated into the Linux kernel there is no need to install any additional software NFS Server The NFS server provides NFS services to clients A running server depends on the following daemons nfsd worker idmapd IDtoname mapping for NFSv4 needed for certain scenarios only statd file locking and mountd mount requests NFSv3 NFSv3 is the version 3 implementation the old stateless NFS that supports client authentication NFSv4 NFSv4 is the new version 4 implementation that supports secure user authentication via kerberos NFSv4 requires one single port only and thus is better suited for environments behind a firewall than NFSv3 The protocol is specified as httptoolsietforghtmlrfc3530 pNFS Parallel NFS a protocol extension of NFSv4 Any pNFS clients can directly access the data on an NFS server Important Need for DNS In principle all exports can be made using IP addresses only To avoid timeouts you need a working DNS system DNS is necessary at least for logging purposes because the mountd daemon does reverse lookups 222 Installing NFS Server The NFS server is not part of the default installation To install the NFS server using YaST choose Software Software Management select Patterns and enable the File Server option in the Server Functions section Click to install the required packages Like NIS NFS is a clientserver system However a machine can be bothit can supply file systems over the network export and mount file systems from other hosts import Note Mounting NFS Volumes Locally on the Exporting Server Mounting NFS volumes locally on the exporting server is not supported on openSUSE Leap 223 Configuring NFS Server Configuring an NFS server can be done either through YaST or manually For authentication NFS can also be combined with Kerberos 2232 Exporting File Systems Manually Report Bug The configuration files for the NFS export service are etcexports and etcsysconfignfs In addition to these files etcidmapdconf is needed for the NFSv4 server configuration with kerberized NFS or if the clients can not work with numeric user names To start or restart the services run the command systemctl restart nfsserver This also restarts the RPC portmapper that is required by the NFS server To make sure the NFS server always starts at boot time run sudo systemctl enable nfsserver Note NFSv4 NFSv4 is the latest version of NFS protocol available on openSUSE Leap Configuring directories for export with NFSv4 is now the same as with NFSv3 On openSUSE prior to Leap the bind mount in etcexports was mandatory It is still supported but now deprecated etcexports The etcexports file contains a list of entries Each entry indicates a directory that is shared and how it is shared A typical entry in etcexports consists of SHARED DIRECTORY HOST OPTION_LIST For example exportdata 19216812rwsync Here the IP address 19216812 is used to identify the allowed client You can also use the name of the host a wild card indicating a set of hosts abccom etc or netgroups myhosts For a detailed explanation of all options and their meaning refer to the man page of etcexports man exports In case you have modified etcexports while the NFS server was running you need to restart it for the changes to become active sudo systemctl restart nfsserver etcsysconfignfs The etcsysconfignfs file contains a few parameters that determine NFSv4 server daemon behavior It is important to set the parameter NFS4_SUPPORT to yes default NFS4_SUPPORT determines whether the NFS server supports NFSv4 exports and clients In case you have modified etcsysconfignfs while the NFS server was running you need to restart it for the changes to become active sudo systemctl restart nfsserver Tip Mount Options On openSUSE prior to Leap the bind mount in etcexports was mandatory It is still supported but now deprecated Configuring directories for export with NFSv4 is now the same as with NFSv3 Note NFSv2 If NFS clients still depend on NFSv2 enable it on the server in etcsysconfignfs by setting NFSD_OPTIONSV2 MOUNTD_OPTIONSV2 After restarting the service check whether version 2 is available with the command tux cat procfsnfsdversions 2 3 4 41 42 etcidmapdconf The idmapd daemon is only required if Kerberos authentication is used or if clients can not work with numeric user names Linux clients can work with numeric user names since Linux kernel 2639 The idmapd daemon does the nametoID mapping for NFSv4 requests to the server and replies to the client If required idmapd needs to run on the NFSv4 server NametoID mapping on the client will be done by nfsidmap provided by the package nfsclient Make sure that there is a uniform way in which user names and IDs UIDs are assigned to users across machines that might probably be sharing file systems using NFS This can be achieved by using NIS LDAP or any uniform domain authentication mechanism in your domain The parameter Domain must be set the same for both client and server in the etcidmapdconf file If you are not sure leave the domain as localdomain in the server and client files A sample configuration file looks like the following General Verbosity 0 PipefsDirectory varlibnfsrpc_pipefs Domain localdomain Mapping NobodyUser nobody NobodyGroup nobody To start the idmapd daemon run systemctl start nfsidmapd In case you have modified etcidmapdconf while the daemon was running you need to restart it for the changes to become active systemctl start nfsidmapd For more information see the man pages of idmapd and idmapdconf man idmapd and man idmapdconf 224 Configuring Clients To configure your host as an NFS client you do not need to install additional software All needed packages are installed by default 2241 Importing File Systems with YaST Report Bug Authorized users can mount NFS directories from an NFS server into the local file tree using the YaST NFS client module Proceed as follows Procedure 222 Importing NFS Directories Start the YaST NFS client module Click Add in the NFS Shares tab Enter the host name of the NFS server the directory to import and the mount point at which to mount this directory locally When using NFSv4 select Enable NFSv4 in the NFS Settings tab Additionally the NFSv4 Domain Name must contain the same value as used by the NFSv4 server The default domain is localdomain To use Kerberos authentication for NFS GSS security must be enabled Select Enable GSS Security Enable Open Port in Firewall in the NFS Settings tab if you use a Firewall and want to allow access to the service from remote computers The firewall status is displayed next to the check box Click OK to save your changes The configuration is written to etcfstab and the specified file systems are mounted When you start the YaST configuration client at a later time it also reads the existing configuration from this file Tip NFS as a Root File System On diskless systems where the root partition is mounted via network as an NFS share you need to be careful when configuring the network device with which the NFS share is accessible When shutting down or rebooting the system the default processing order is to turn off network connections then unmount the root partition With NFS root this order causes problems as the root partition can not be cleanly unmounted as the network connection to the NFS share is already not activated To prevent the system from deactivating the relevant network device open the network device configuration tab as described in Section 134125 Activating the Network Device and choose On NFSroot in the Device Activation pane 2242 Importing File Systems Manually Report Bug The prerequisite for importing file systems manually from an NFS server is a running RPC port mapper The nfs service takes care to start it properly thus start it by entering systemctl start nfs as root Then remote file systems can be mounted in the file system like local partitions using mount tux sudo mount HOST REMOTEPATH LOCALPATH To import user directories from the nfsexamplecom machine for example use tux sudo mount nfsexamplecomhome home 22421 Using the Automount Service The autofs daemon can be used to mount remote file systems automatically Add the following entry to the etcautomaster file nfsmounts etcautonfs Now the nfsmounts directory acts as the root for all the NFS mounts on the client if the autonfs file is filled appropriately The name autonfs is chosen for the sake of convenienceyou can choose any name In autonfs add entries for all the NFS mounts as follows localdata fstypenfs server1data nfs4mount fstypenfs4 server2 Activate the settings with systemctl start autofs as root In this example nfsmountslocaldata the data directory of server1 is mounted with NFS and nfsmountsnfs4mount from server2 is mounted with NFSv4 If the etcautomaster file is edited while the service autofs is running the automounter must be restarted for the changes to take effect with systemctl restart autofs 22422 Manually Editing etcfstab A typical NFSv3 mount entry in etcfstab looks like this nfsexamplecomdata localpath nfs rwnoauto 0 0 For NFSv4 mounts use nfs4 instead of nfs in the third column nfsexamplecomdata localpathv4 nfs4 rwnoauto 0 0 The noauto option prevents the file system from being mounted automatically at startup If you want to mount the respective file system manually it is possible to shorten the mount command specifying the mount point only tux sudo mount localpath Note Mounting at StartUp If you do not enter the noauto option the init scripts of the system will handle the mount of those file systems at startup 2243 Parallel NFS pNFS Report Bug NFS is one of the oldest protocols developed in the 80s As such NFS is usually sufficient if you want to share small files However when you want to transfer big files or many clients want to access data an NFS server becomes a bottleneck and has a significant impact on the system performance This is because of files quickly getting bigger whereas the relative speed of your Ethernet has not fully kept up When you request a file from a regular NFS server the server looks up the file metadata collects all the data and transfers it over the network to your client However the performance bottleneck becomes apparent no matter how small or big the files are With small files most of the time is spent collecting the metadata With big files most of the time is spent on transferring the data from server to client pNFS or parallel NFS overcomes this limitation as it separates the file system metadata from the location of the data As such pNFS requires two types of servers A metadata or control server that handles all the nondata traffic One or more storage servers that holds the data The metadata and the storage servers form a single logical NFS server When a client wants to read or write the metadata server tells the NFSv4 client which storage server to use to access the file chunks The client can access the data directly on the server openSUSE Leap supports pNFS on the client side only 22431 Configuring pNFS Client With YaST Proceed as described in Procedure 222 Importing NFS Directories but click the pNFS v41 check box and optionally NFSv4 share YaST will do all the necessary steps and will write all the required options in the file etcexports 22432 Configuring pNFS Client Manually Refer to Section 2242 Importing File Systems Manually to start Most of the configuration is done by the NFSv4 server For pNFS the only difference is to add the minorversion option and the metadata server MDS_SERVER to your mount command tux sudo mount t nfs4 o minorversion1 MDS_SERVER MOUNTPOINT To help with debugging change the value in the proc file system tux sudo echo 32767 procsyssunrpcnfsd_debug tux sudo echo 32767 procsyssunrpcnfs_debug 225 For More Information In addition to the man pages of exports nfs and mount information about configuring an NFS server and client is available in usrsharedocpackagesnfsidmapREADME For further documentation online refer to the following Web sites Find the detailed technical documentation online at SourceForge For instructions for setting up kerberized NFS refer to NFS Version 4 Open Source Reference Implementation If you have questions on NFSv4 refer to the Linux NFSv4 FAQ

O O O O O O O O B O O O O O B O O O O O O O O O O O O O O O O O O B I O O O O B O O O B O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O B O B O O O O O O O O O O O O B O B O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O B O O B O O O O O O B O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O B O O B O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O B O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O B B O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O B O O O O O O O O O O O O O O B O O O B O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O B O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O B O O O O O O O O O B O O O O O O O O B O O O O B O O O O O O B O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O B O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O B O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O B O O O O O O O O O O O O O O O O O O


DOC Taycheedah Correctional Institution Taycheedah Correctional Institution Division of Adult Institutions Adult Facilities Incarceration Lifecycle Visiting Information Money Mail Property General Information Annual Reports Sarah Cooper Warden 751 County Road K Fond du Lac WI 549361947 920 9293800 920 9292946 Fax Institution Fact Sheet Intake Property Visiting Information English or Spanish Inmate Handbook English or Spanish Purpose Statement Taycheedah Correctional Institution TCI provides female inmates with a safe and secure environment that is genderresponsive TCI utilizes genderspecific guiding principles to assist in the positive positive growth of inmates through treatment education and appropriate supervision thereby fostering successful reentry to their families and communities upon release Institution Information All adult female correctional facilities including TCI Robert E Ellsworth Correctional Center and Milwaukee Womens Correctional Center were joined together as the Wisconsin Womens Correctional System on August 21 2005 falling under the supervision of the TCI warden TCI is a maximum and mediumsecurity facility entrusted with the custody and supervision of adult female offenders It also serves as the intake assessment and evaluation facility for all female inmates sentenced to adult custody Taycheedahs history began in the early 1800s when Governor James Doty built his home in Fond du Lac which still stands on the institution grounds In the early 1850s female offenders were housed in the Wisconsin State Prison known today as Waupun Correctional Institution In 1912 work began on the creation of a womens facility and in 1921 the Wisconsin Industrial Home for Women was opened The first inmates of the Wisconsin Industrial Home for Women were mostly committed for crimes against morality while repeat and more violent or serious offenders continued to be housed at the State Prison in In 1931 work began on the Wisconsin Prison for Women located adjacent to the Industrial Home This facility was completed and opened in 1933 and the women yet housed in Waupun were transferred there The two facilities continued to operate separately on the same grounds until in 1945 the facilities were consolidated under the name Wisconsin Home for Women In 1975 the legislature officially changed the name to Taycheedah Correctional Institution

O B I I B I I O O O O O O O O O O O O O O O O O B I O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I

taycheedah correctional institution
sarah cooper
fond du lac


AWS Documentation Amazon Simple Storage Service S3 Developer Guide Hosting a Static Website on Amazon S3 Configuring a Bucket for Website Hosting Permissions Required for Website Access Permissions Required for Website Access When you configure a bucket as a website you must make the objects that you want to serve publicly readable To do this you write a bucket policy that grants everyone s3GetObject permission On the website endpoint if a user requests an object that doesnt exist Amazon S3 returns HTTP response code 404 Not Found If the object exists but you havent granted read permission on it the website endpoint returns HTTP response code 403 Access Denied The user can use the response code to infer whether a specific object exists If you dont want this behavior you should not enable website support for your bucket The following sample bucket policy grants everyone access to the objects in the specified folder For more information about bucket policies see Using Bucket Policies and User Policies Version 20121017 Statement Sid PublicReadGetObject Effect Allow Principal Action s3GetObject Resource arnawss3examplebucket Note Keep the following in mind To host a website your bucket must have public read access It is intentional that everyone in the world will have read access to this bucket The bucket policy applies only to objects that are owned by the bucket owner If your bucket contains objects that arent owned by the bucket owner public READ permission on those objects should be granted using the object access control list ACL You can grant public read permission to your objects by using either a bucket policy or an object ACL To make an object publicly readable using an ACL grant READ permission to the AllUsers group as shown in the following grant element Add this grant element to the object ACL For information about managing ACLs see Managing Access with ACLs Grant Grantee xmlnsxsi httpwwww3org2001XMLSchemainstance xsitype Group URI httpacsamazonawscomgroupsglobalAllUsers URI Grantee Permission READ Permission Grant Document Conventions

O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O B I O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O

website access
publicly readable
sample bucket


AWS Documentation Amazon Redshift Database Developer Guide Choosing a Data Distribution Style Distribution Styles Distribution Styles When you create a table you can designate one of three distribution styles EVEN KEY or ALL If you dont specify a distribution style Amazon Redshift uses automatic distribution Automatic distribution If you dont specify a distribution style with the CREATE TABLE statement Amazon Redshift applies automatic distribution With automatic distribution Amazon Redshift assigns an optimal distribution style based on the size of the table data For example Amazon Redshift initially assigns ALL distribution to a small table then changes to EVEN distribution when the table grows larger When a table is changed from ALL to EVEN distribution storage utilization might change slightly The change in distribution occurs in the background in a few seconds Amazon Redshift never changes the distribution style from EVEN to ALL To view the distribution style applied to a table query the PG_CLASS_INFO system catalog view For more information see Viewing Distribution Styles Even distribution The leader node distributes the rows across the slices in a roundrobin fashion regardless of the values in any particular column EVEN distribution is appropriate when a table does not participate in joins or when there is not a clear choice between KEY distribution and ALL distribution Key distribution The rows are distributed according to the values in one column The leader node places matching values on the same node slice If you distribute a pair of tables on the joining keys the leader node collocates the rows on the slices according to the values in the joining columns so that matching values from the common columns are physically stored together ALL distribution A copy of the entire table is distributed to every node Where EVEN distribution or KEY distribution place only a portion of a tables rows on each node ALL distribution ensures that every row is collocated for every join that the table participates in ALL distribution multiplies the storage required by the number of nodes in the cluster and so it takes much longer to load update or insert data into multiple tables ALL distribution is appropriate only for relatively slow moving tables that is tables that are not updated frequently or extensively Small dimension tables do not benefit significantly from ALL distribution because the cost of redistribution is low Note After you have specified a distribution style for a column Amazon Redshift handles data distribution at the cluster level Amazon Redshift does not require or support the concept of partitioning data within database objects You do not need to create table spaces or define partitioning schemes for tables You cant change the distribution style of a table after its created To use a different distribution style you can recreate the table and populate the new table with a deep copy For more information see Performing a Deep Copy Document Conventions

O O B B O O O O O O O O B I B I O O O O O O O O O O O B I O O O O O O O O O O O B B O O O O O O O O O O O O O O O O O B B O O O O O O B B O O O O O O O O O O O O O O O B B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B B O O O O O O O B B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


M3 API overview Application Programming Interfaces APIs are routines that validate records display record related information and create or update files in the Infor database In an API reference you define the data needed by IEC to call M3 APIs The data you specify is used in a mapping to call one or more M3 APIs

B I I B I I O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O

m3 api overview
application programming interfaces
api reference


HTTP

API

Generated

on

from

goipfs

When

an

IPFS

node

is

running

as

a

daemon

it

exposes

an

HTTP

API

that

allows

you

to

control

the

node

and

run

the

same

commands

you

can

from

the

command

line

In

many

cases

using

this

API

this

is

preferable

to

embedding

IPFS

directly

in

your

program

it

allows

you

to

maintain

peer

connections

that

are

longer

lived

than

your

app

and

you

can

keep

a

single

IPFS

node

running

instead

of

several

if

your

app

can

be

launched

multiple

times

In

fact

the

ipfs

CLI

commands

use

this

API

when

operating

in

online

mode

This

API

is

intended

to

be

the

same

across

different

IPFS

implementations

However

not

all

implementations

are

equally

uptodate

The

most

featurecomplete

and

the

current

reference

for

this

specification

is

goipfs

This

document

is

autogenerated

from

goipfs

For

issues

and

support

check

out

the

ipfshttpapidocs

repository

on

GitHub

Getting

started

Alignment

with

CLI

Commands

Every

command

usable

from

the

CLI

is

also

available

through

the

HTTP

API

For

example

ipfs

swarm

peers

curl

Strings

Arguments

Arguments

are

added

through

the

special

query

string

key

arg

curl

Strings

disconnect

success

Note

that

it

can

be

used

multiple

times

to

signify

multiple

arguments

Flags

Flags

are

added

through

the

query

string

For

example

the

encodingjson

flag

is

the

encodingjson

query

parameter

below

curl

Links

Name

indexhtml

Hash

Size

Name

static

Hash

Size

Data

CAE

Index

add

bitswapledger

bitswapreprovide

bitswapstat

bitswapunwant

bitswapwantlist

blockget

blockput

blockrm

blockstat

bootstrapadddefault

bootstraplist

bootstraprmall

cat

commands

configedit

configprofileapply

configreplace

configshow

dagget

dagput

dagresolve

dhtfindpeer

dhtfindprovs

dhtget

dhtprovide

dhtput

dhtquery

diagcmdsclear

diagcmdssettime

diagsys

dns

filels

fileschcid

filescp

filesflush

filesls

filesmkdir

filesmv

filesread

filesrm

filesstat

fileswrite

filestoredups

filestorels

filestoreverify

get

id

keygen

keylist

keyrename

keyrm

loglevel

logls

logtail

ls

mount

namepublish

namepubsubcancel

namepubsubstate

namepubsubsubs

nameresolve

objectdata

objectdiff

objectget

objectlinks

objectnew

objectpatchaddlink

objectpatchappenddata

objectpatchrmlink

objectpatchsetdata

objectput

objectstat

pinadd

pinls

pinrm

pinupdate

pinverify

ping

pubsubls

pubsubpeers

pubsubpub

pubsubsub

refslocal

repofsck

repogc

repostat

repoverify

repoversion

resolve

shutdown

statsbitswap

statsbw

statsrepo

swarmaddrslisten

swarmaddrslocal

swarmconnect

swarmdisconnect

swarmfiltersadd

swarmfiltersrm

swarmpeers

taradd

tarcat

update

version

Endpoints

Add

a

file

or

directory

to

ipfs

Arguments

arg

file

The

path

to

a

file

to

be

added

to

ipfs

Required

yes

recursive

bool

Add

directory

paths

recursively

Default

false

Required

no

quiet

bool

Write

minimal

output

Required

no

quieter

bool

Write

only

final

hash

Required

no

silent

bool

Write

no

output

Required

no

progress

bool

Stream

progress

data

Required

no

trickle

bool

Use

trickledag

format

for

dag

generation

Required

no

onlyhash

bool

Only

chunk

and

hash

do

not

write

to

disk

Required

no

wrapwithdirectory

bool

Wrap

files

with

a

directory

object

Required

no

hidden

bool

Include

files

that

are

hidden

Only

takes

effect

on

recursive

add

Required

no

chunker

string

Chunking

algorithm

sizebytes

or

rabinminavgmax

Default

Required

no

pin

bool

Pin

this

object

when

adding

Default

true

Required

no

rawleaves

bool

Use

raw

blocks

for

leaf

nodes

experimental

Required

no

nocopy

bool

Add

the

file

using

filestore

Implies

rawleaves

experimental

Required

no

fscache

bool

Check

the

filestore

for

preexisting

blocks

experimental

Required

no

cidversion

int

CID

version

Defaults

to

unless

an

option

that

depends

on

is

passed

experimental

Required

no

hash

string

Hash

function

to

use

Implies

if

not

experimental

Default

Required

no

Request

Body

Argument

path

is

of

file

type

This

endpoint

expects

a

file

in

the

body

of

the

request

as

multipartformdata

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Name

string

Hash

string

Bytes

Size

string

cURL

Example

curl

F

filemyfile

Show

the

current

ledger

for

a

peer

Arguments

arg

string

The

PeerID

of

the

ledger

to

inspect

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Peer

string

Value

Sent

Recv

Exchanged

cURL

Example

curl

Trigger

reprovider

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Show

some

diagnostic

information

on

the

bitswap

agent

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

ProvideBufLen

int

Wantlist

cidstring

Peers

string

BlocksReceived

DataReceived

BlocksSent

DataSent

DupBlksReceived

DupDataReceived

cURL

Example

curl

Remove

a

given

block

from

your

wantlist

Arguments

arg

string

Keys

to

remove

from

your

wantlist

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Show

blocks

currently

on

the

wantlist

Arguments

peer

string

Specify

which

peer

to

show

wantlist

for

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Keys

cidstring

cURL

Example

curl

Get

a

raw

IPFS

block

Arguments

arg

string

The

multihash

of

an

existing

block

to

get

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Store

input

as

an

IPFS

block

Arguments

arg

file

The

data

to

be

stored

as

an

IPFS

block

Required

yes

format

string

cid

format

for

blocks

to

be

created

with

Required

no

mhtype

string

multihash

hash

function

Default

Required

no

mhlen

int

multihash

hash

length

Default

Required

no

Request

Body

Argument

data

is

of

file

type

This

endpoint

expects

a

file

in

the

body

of

the

request

as

multipartformdata

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Key

string

Size

int

cURL

Example

curl

F

filemyfile

Remove

IPFS

blocks

Arguments

arg

string

encoded

multihash

of

blocks

to

remove

Required

yes

force

bool

Ignore

nonexistent

blocks

Required

no

quiet

bool

Write

minimal

output

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

Error

string

cURL

Example

curl

Print

information

of

a

raw

IPFS

block

Arguments

arg

string

The

multihash

of

an

existing

block

to

stat

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Key

string

Size

int

cURL

Example

curl

Add

default

peers

to

the

bootstrap

list

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Peers

string

cURL

Example

curl

Show

peers

in

the

bootstrap

list

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Peers

string

cURL

Example

curl

Remove

all

peers

from

the

bootstrap

list

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Peers

string

cURL

Example

curl

Show

IPFS

object

data

Arguments

arg

string

The

path

to

the

IPFS

objects

to

be

outputted

Required

yes

offset

int

Byte

offset

to

begin

reading

from

Required

no

length

int

Maximum

number

of

bytes

to

read

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

List

all

available

commands

Arguments

flags

bool

Show

command

flags

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Name

string

Subcommands

Name

string

Subcommands

Name

string

Subcommands

Options

showOpts

bool

Options

Names

showOpts

bool

Options

Names

string

showOpts

bool

cURL

Example

curl

Open

the

config

file

for

editing

in

EDITOR

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Apply

profile

to

config

Arguments

arg

string

The

profile

to

apply

to

the

config

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Replace

the

config

with

Arguments

arg

file

The

file

to

use

as

the

new

config

Required

yes

Request

Body

Argument

file

is

of

file

type

This

endpoint

expects

a

file

in

the

body

of

the

request

as

multipartformdata

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

F

filemyfile

Output

config

file

contents

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Get

a

dag

node

from

ipfs

Arguments

arg

string

The

object

to

get

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Add

a

dag

node

to

ipfs

Arguments

arg

file

The

object

to

put

Required

yes

format

string

Format

that

the

object

will

be

added

as

Default

cbor

Required

no

inputenc

string

Format

that

the

input

object

will

be

Default

json

Required

no

pin

bool

Pin

this

object

when

adding

Required

no

hash

string

Hash

function

to

use

Default

Required

no

Request

Body

Argument

object

data

is

of

file

type

This

endpoint

expects

a

file

in

the

body

of

the

request

as

multipartformdata

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Cid

cidstring

cURL

Example

curl

F

filemyfile

Resolve

ipld

block

Arguments

arg

string

The

path

to

resolve

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Cid

cidstring

RemPath

string

cURL

Example

curl

Query

the

DHT

for

all

of

the

multiaddresses

associated

with

a

Peer

ID

Arguments

arg

string

The

ID

of

the

peer

to

search

for

Required

yes

verbose

bool

Print

extra

information

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

ID

string

Type

int

Responses

ID

string

Addrs

multiaddrstring

Extra

string

cURL

Example

curl

Find

peers

in

the

DHT

that

can

provide

a

specific

value

given

a

key

Arguments

arg

string

The

key

to

find

providers

for

Required

yes

verbose

bool

Print

extra

information

Required

no

numproviders

int

The

number

of

providers

to

find

Default

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

ID

string

Type

int

Responses

ID

string

Addrs

multiaddrstring

Extra

string

cURL

Example

curl

Given

a

key

query

the

DHT

for

its

best

value

Arguments

arg

string

The

key

to

find

a

value

for

Required

yes

verbose

bool

Print

extra

information

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

ID

string

Type

int

Responses

ID

string

Addrs

multiaddrstring

Extra

string

cURL

Example

curl

Announce

to

the

network

that

you

are

providing

given

values

Arguments

arg

string

The

keys

to

send

provide

records

for

Required

yes

verbose

bool

Print

extra

information

Required

no

recursive

bool

Recursively

provide

entire

graph

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

ID

string

Type

int

Responses

ID

string

Addrs

multiaddrstring

Extra

string

cURL

Example

curl

Write

a

keyvalue

pair

to

the

DHT

Arguments

arg

string

The

key

to

store

the

value

at

Required

yes

arg

string

The

value

to

store

Required

yes

verbose

bool

Print

extra

information

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

ID

string

Type

int

Responses

ID

string

Addrs

multiaddrstring

Extra

string

cURL

Example

curl

Find

the

closest

Peer

IDs

to

a

given

Peer

ID

by

querying

the

DHT

Arguments

arg

string

The

peerID

to

run

the

query

against

Required

yes

verbose

bool

Print

extra

information

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

ID

string

Type

int

Responses

ID

string

Addrs

multiaddrstring

Extra

string

cURL

Example

curl

Clear

inactive

requests

from

the

log

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Set

how

long

to

keep

inactive

requests

in

the

log

Arguments

arg

string

Time

to

keep

inactive

requests

in

log

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Print

system

diagnostic

information

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Resolve

DNS

links

Arguments

arg

string

The

domainname

name

to

resolve

Required

yes

recursive

bool

Resolve

until

the

result

is

not

a

DNS

link

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Path

string

cURL

Example

curl

List

directory

contents

for

Unix

filesystem

objects

Arguments

arg

string

The

path

to

the

IPFS

objects

to

list

links

from

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Arguments

string

string

Objects

string

Hash

string

Size

Type

string

Links

Name

string

Hash

string

Size

Type

string

cURL

Example

curl

Change

the

cid

version

or

hash

function

of

the

root

node

of

a

given

path

Arguments

arg

string

Path

to

change

Default

Required

no

cidversion

int

Cid

version

to

use

experimental

Required

no

hash

string

Hash

function

to

use

Will

set

Cid

version

to

if

used

experimental

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Copy

files

into

mfs

Arguments

arg

string

Source

object

to

copy

Required

yes

arg

string

Destination

to

copy

object

to

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Flush

a

given

paths

data

to

disk

Arguments

arg

string

Path

to

flush

Default

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

List

directories

in

the

local

mutable

namespace

Arguments

arg

string

Path

to

show

listing

for

Defaults

to

Required

no

l

bool

Use

long

listing

format

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Entries

Name

string

Type

int

Size

Hash

string

cURL

Example

curl

Make

directories

Arguments

arg

string

Path

to

dir

to

make

Required

yes

parents

bool

No

error

if

existing

make

parent

directories

as

needed

Required

no

cidversion

int

Cid

version

to

use

experimental

Required

no

hash

string

Hash

function

to

use

Will

set

Cid

version

to

if

used

experimental

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Move

files

Arguments

arg

string

Source

file

to

move

Required

yes

arg

string

Destination

path

for

file

to

be

moved

to

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Read

a

file

in

a

given

mfs

Arguments

arg

string

Path

to

file

to

be

read

Required

yes

offset

int

Byte

offset

to

begin

reading

from

Required

no

count

int

Maximum

number

of

bytes

to

read

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Remove

a

file

Arguments

arg

string

File

to

remove

Required

yes

recursive

bool

Recursively

remove

directories

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Display

file

status

Arguments

arg

string

Path

to

node

to

stat

Required

yes

format

string

Print

statistics

in

given

format

Allowed

tokens

Conflicts

with

other

format

options

Default

Size

CumulativeSize

ChildBlocks

Type

Default

Size

CumulativeSize

ChildBlocks

Type

Required

no

hash

bool

Print

only

hash

Implies

format

Conflicts

with

other

format

options

Required

no

size

bool

Print

only

size

Implies

format

Conflicts

with

other

format

options

Required

no

withlocal

bool

Compute

the

amount

of

the

dag

that

is

local

and

if

possible

the

total

size

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

Size

CumulativeSize

Blocks

int

Type

string

WithLocality

bool

Local

bool

SizeLocal

cURL

Example

curl

Size

size

CumulativeSize

cumulsize

ChildBlocks

childs

Type

typehashvaluesizevaluewithlocalvalue

Write

to

a

mutable

file

in

a

given

filesystem

Arguments

arg

string

Path

to

write

to

Required

yes

arg

file

Data

to

write

Required

yes

offset

int

Byte

offset

to

begin

writing

at

Required

no

create

bool

Create

the

file

if

it

does

not

exist

Required

no

truncate

bool

Truncate

the

file

to

size

zero

before

writing

Required

no

count

int

Maximum

number

of

bytes

to

read

Required

no

rawleaves

bool

Use

raw

blocks

for

newly

created

leaf

nodes

experimental

Required

no

cidversion

int

Cid

version

to

use

experimental

Required

no

hash

string

Hash

function

to

use

Will

set

Cid

version

to

if

used

experimental

Required

no

Request

Body

Argument

data

is

of

file

type

This

endpoint

expects

a

file

in

the

body

of

the

request

as

multipartformdata

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

F

filemyfile

List

blocks

that

are

both

in

the

filestore

and

standard

block

storage

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Ref

string

Err

string

cURL

Example

curl

List

objects

in

filestore

Arguments

arg

string

Cid

of

objects

to

list

Required

no

fileorder

bool

sort

the

results

based

on

the

path

of

the

backing

file

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Status

ErrorMsg

string

Key

cidstring

FilePath

string

Offset

Size

cURL

Example

curl

Verify

objects

in

filestore

Arguments

arg

string

Cid

of

objects

to

verify

Required

no

fileorder

bool

verify

the

objects

based

on

the

order

of

the

backing

file

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Status

ErrorMsg

string

Key

cidstring

FilePath

string

Offset

Size

cURL

Example

curl

Download

IPFS

objects

Arguments

arg

string

The

path

to

the

IPFS

objects

to

be

outputted

Required

yes

output

string

The

path

where

the

output

should

be

stored

Required

no

archive

bool

Output

a

TAR

archive

Required

no

compress

bool

Compress

the

output

with

GZIP

compression

Required

no

compressionlevel

int

The

level

of

compression

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Show

ipfs

node

id

info

Arguments

arg

string

PeerID

of

node

to

look

up

Required

no

format

string

Optional

output

format

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

ID

string

PublicKey

string

Addresses

string

AgentVersion

string

ProtocolVersion

string

cURL

Example

curl

Create

a

new

keypair

Arguments

arg

string

name

of

key

to

create

Required

yes

type

string

type

of

the

key

to

create

rsa

Required

no

size

int

size

of

the

key

to

generate

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Name

string

Id

string

cURL

Example

curl

List

all

local

keypairs

Arguments

l

bool

Show

extra

information

about

keys

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Keys

Name

string

Id

string

cURL

Example

curl

Rename

a

keypair

Arguments

arg

string

name

of

key

to

rename

Required

yes

arg

string

new

name

of

the

key

Required

yes

force

bool

Allow

to

overwrite

an

existing

key

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Was

string

Now

string

Id

string

Overwrite

bool

cURL

Example

curl

Remove

a

keypair

Arguments

arg

string

names

of

keys

to

remove

Required

yes

l

bool

Show

extra

information

about

keys

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Keys

Name

string

Id

string

cURL

Example

curl

Change

the

logging

level

Arguments

arg

string

The

subsystem

logging

identifier

Use

all

for

all

subsystems

Required

yes

arg

string

The

log

level

with

debug

the

most

verbose

and

critical

the

least

verbose

One

of

debug

info

warning

error

critical

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Message

string

cURL

Example

curl

List

the

logging

subsystems

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

Read

the

event

log

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

List

directory

contents

for

Unix

filesystem

objects

Arguments

arg

string

The

path

to

the

IPFS

objects

to

list

links

from

Required

yes

headers

bool

Print

table

headers

Hash

Size

Name

Required

no

resolvetype

bool

Resolve

linked

objects

to

find

out

their

types

Default

true

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Objects

Hash

string

Links

Name

string

Hash

string

Size

Type

cURL

Example

curl

Mounts

IPFS

to

the

filesystem

readonly

Arguments

ipfspath

string

The

path

where

IPFS

should

be

mounted

Required

no

ipnspath

string

The

path

where

IPNS

should

be

mounted

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

IPFS

string

IPNS

string

FuseAllowOther

bool

cURL

Example

curl

Publish

IPNS

names

Arguments

arg

string

ipfs

path

of

the

object

to

be

published

Required

yes

resolve

bool

Resolve

given

path

before

publishing

Default

true

Required

no

lifetime

string

Time

duration

that

the

record

will

be

valid

for

This

accepts

durations

such

as

or

Valid

time

units

are

ns

us

or

µs

ms

s

m

h

Default

Required

no

ttl

string

Time

duration

this

record

should

be

cached

for

caution

experimental

Required

no

key

string

Name

of

the

key

to

be

used

or

a

valid

PeerID

as

listed

by

ipfs

key

list

l

Default

Default

self

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Name

string

Value

string

cURL

Example

curl

Cancel

a

name

subscription

Arguments

arg

string

Name

to

cancel

the

subscription

for

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Canceled

bool

cURL

Example

curl

Query

the

state

of

IPNS

pubsub

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Enabled

bool

cURL

Example

curl

Show

current

name

subscriptions

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

Resolve

IPNS

names

Arguments

arg

string

The

IPNS

name

to

resolve

Defaults

to

your

nodes

peerID

Required

no

recursive

bool

Resolve

until

the

result

is

not

an

IPNS

name

Required

no

nocache

bool

Do

not

use

cached

entries

Required

no

dhtrecordcount

uint

Number

of

records

to

request

for

DHT

resolution

Required

no

dhttimeout

string

Max

time

to

collect

values

during

DHT

resolution

eg

Pass

for

no

timeout

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Path

string

cURL

Example

curl

Output

the

raw

bytes

of

an

IPFS

object

Arguments

arg

string

Key

of

the

object

to

retrieve

in

multihash

format

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Display

the

diff

between

two

ipfs

objects

Arguments

arg

string

Object

to

diff

against

Required

yes

arg

string

Object

to

diff

Required

yes

verbose

bool

Print

extra

information

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Changes

Type

int

Path

string

Before

cidstring

After

cidstring

cURL

Example

curl

Get

and

serialize

the

DAG

node

named

by

Arguments

arg

string

Key

of

the

object

to

retrieve

in

multihash

format

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Links

Name

string

Hash

string

Size

Data

string

cURL

Example

curl

Output

the

links

pointed

to

by

the

specified

object

Arguments

arg

string

Key

of

the

object

to

retrieve

in

multihash

format

Required

yes

headers

bool

Print

table

headers

Hash

Size

Name

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

Links

Name

string

Hash

string

Size

cURL

Example

curl

Create

a

new

object

from

an

ipfs

template

Arguments

arg

string

Template

to

use

Optional

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

Links

Name

string

Hash

string

Size

cURL

Example

curl

Add

a

link

to

a

given

object

Arguments

arg

string

The

hash

of

the

node

to

modify

Required

yes

arg

string

Name

of

link

to

create

Required

yes

arg

string

IPFS

object

to

add

link

to

Required

yes

create

bool

Create

intermediary

nodes

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

Links

Name

string

Hash

string

Size

cURL

Example

curl

Append

data

to

the

data

segment

of

a

dag

node

Arguments

arg

string

The

hash

of

the

node

to

modify

Required

yes

arg

file

Data

to

append

Required

yes

Request

Body

Argument

data

is

of

file

type

This

endpoint

expects

a

file

in

the

body

of

the

request

as

multipartformdata

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

Links

Name

string

Hash

string

Size

cURL

Example

curl

F

filemyfile

Remove

a

link

from

an

object

Arguments

arg

string

The

hash

of

the

node

to

modify

Required

yes

arg

string

Name

of

the

link

to

remove

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

Links

Name

string

Hash

string

Size

cURL

Example

curl

Set

the

data

field

of

an

IPFS

object

Arguments

arg

string

The

hash

of

the

node

to

modify

Required

yes

arg

file

The

data

to

set

the

object

to

Required

yes

Request

Body

Argument

data

is

of

file

type

This

endpoint

expects

a

file

in

the

body

of

the

request

as

multipartformdata

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

Links

Name

string

Hash

string

Size

cURL

Example

curl

F

filemyfile

Store

input

as

a

DAG

object

print

its

key

Arguments

arg

file

Data

to

be

stored

as

a

DAG

object

Required

yes

inputenc

string

Encoding

type

of

input

data

One

of

protobuf

json

Default

json

Required

no

datafieldenc

string

Encoding

type

of

the

data

field

either

text

or

Default

text

Required

no

pin

bool

Pin

this

object

when

adding

Required

no

quiet

bool

Write

minimal

output

Required

no

Request

Body

Argument

data

is

of

file

type

This

endpoint

expects

a

file

in

the

body

of

the

request

as

multipartformdata

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

Links

Name

string

Hash

string

Size

cURL

Example

curl

F

filemyfile

Get

stats

for

the

DAG

node

named

by

Arguments

arg

string

Key

of

the

object

to

retrieve

in

multihash

format

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Hash

string

NumLinks

int

BlockSize

int

LinksSize

int

DataSize

int

CumulativeSize

int

cURL

Example

curl

Close

active

listener

Arguments

arg

string

listener

protocol

Required

no

all

bool

Close

all

listeners

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

List

active

listeners

Arguments

headers

bool

Print

table

headers

HandlerID

Protocol

Local

Remote

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Listeners

Protocol

string

Address

string

cURL

Example

curl

Forward

connections

to

a

network

multiaddr

Arguments

arg

string

Protocol

identifier

Required

yes

arg

string

Request

handling

application

address

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Close

active

stream

Arguments

arg

string

Stream

HandlerID

Required

no

all

bool

Close

all

streams

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Dial

to

a

listener

Arguments

arg

string

Remote

peer

to

connect

to

Required

yes

arg

string

Protocol

identifier

Required

yes

arg

string

Address

to

listen

for

connections

default

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

List

active

streams

Arguments

headers

bool

Print

table

headers

HagndlerID

Protocol

Local

Remote

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Streams

HandlerID

string

Protocol

string

LocalPeer

string

LocalAddress

string

RemotePeer

string

RemoteAddress

string

cURL

Example

curl

Pin

objects

to

local

storage

Arguments

arg

string

Path

to

objects

to

be

pinned

Required

yes

recursive

bool

Recursively

pin

the

object

linked

to

by

the

specified

objects

Default

true

Required

no

progress

bool

Show

progress

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Pins

string

Progress

int

cURL

Example

curl

List

objects

pinned

to

local

storage

Arguments

arg

string

Path

to

objects

to

be

listed

Required

no

type

string

The

type

of

pinned

keys

to

list

Can

be

direct

indirect

recursive

or

all

Default

all

Required

no

quiet

bool

Write

just

hashes

of

objects

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Keys

string

Type

string

cURL

Example

curl

Remove

pinned

objects

from

local

storage

Arguments

arg

string

Path

to

objects

to

be

unpinned

Required

yes

recursive

bool

Recursively

unpin

the

object

linked

to

by

the

specified

objects

Default

true

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Pins

string

cURL

Example

curl

Update

a

recursive

pin

Arguments

arg

string

Path

to

old

object

Required

yes

arg

string

Path

to

new

object

to

be

pinned

Required

yes

unpin

bool

Remove

the

old

pin

Default

true

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Pins

string

cURL

Example

curl

Verify

that

recursive

pins

are

complete

Arguments

verbose

bool

Also

write

the

hashes

of

nonbroken

pins

Required

no

quiet

bool

Write

just

hashes

of

broken

pins

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Cid

string

PinStatus

Ok

bool

BadNodes

Cid

string

Err

string

cURL

Example

curl

Send

echo

request

packets

to

IPFS

hosts

Arguments

arg

string

ID

of

peer

to

be

pinged

Required

yes

count

int

Number

of

ping

messages

to

send

Default

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Success

bool

Time

Text

string

cURL

Example

curl

List

subscribed

topics

by

name

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

List

peers

we

are

currently

pubsubbing

with

Arguments

arg

string

topic

to

list

connected

peers

of

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

Publish

a

message

to

a

given

pubsub

topic

Arguments

arg

string

Topic

to

publish

to

Required

yes

arg

string

Payload

of

message

to

publish

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Subscribe

to

messages

on

a

given

topic

Arguments

arg

string

String

name

of

topic

to

subscribe

to

Required

yes

discover

bool

try

to

discover

other

peers

subscribed

to

the

same

topic

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Message

From

Data

Seqno

TopicIDs

string

cURL

Example

curl

List

all

local

references

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Ref

string

Err

string

cURL

Example

curl

Remove

repo

lockfiles

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Message

string

cURL

Example

curl

Perform

a

garbage

collection

sweep

on

the

repo

Arguments

streamerrors

bool

Stream

errors

Required

no

quiet

bool

Write

minimal

output

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Key

cidstring

Error

string

cURL

Example

curl

Get

stats

for

the

currently

used

repo

Arguments

human

bool

Output

RepoSize

in

MiB

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

NumObjects

RepoSize

RepoPath

string

Version

string

StorageMax

cURL

Example

curl

Verify

all

blocks

in

repo

are

not

corrupted

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Msg

string

Progress

int

cURL

Example

curl

Show

the

repo

version

Arguments

quiet

bool

Write

minimal

output

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Version

string

cURL

Example

curl

Resolve

the

value

of

names

to

IPFS

Arguments

arg

string

The

name

to

resolve

Required

yes

recursive

bool

Resolve

until

the

result

is

an

IPFS

name

Required

no

dhtrecordcount

uint

Number

of

records

to

request

for

DHT

resolution

Required

no

dhttimeout

string

Max

time

to

collect

values

during

DHT

resolution

eg

Pass

for

no

timeout

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Path

string

cURL

Example

curl

Shut

down

the

ipfs

daemon

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Show

some

diagnostic

information

on

the

bitswap

agent

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

ProvideBufLen

int

Wantlist

cidstring

Peers

string

BlocksReceived

DataReceived

BlocksSent

DataSent

DupBlksReceived

DupDataReceived

cURL

Example

curl

Print

ipfs

bandwidth

information

Arguments

peer

string

Specify

a

peer

to

print

bandwidth

for

Required

no

proto

string

Specify

a

protocol

to

print

bandwidth

for

Required

no

poll

bool

Print

bandwidth

at

an

interval

Required

no

interval

string

Time

interval

to

wait

between

updating

output

if

poll

is

true

This

accepts

durations

such

as

or

Valid

time

units

are

ns

us

or

µs

ms

s

m

h

Default

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

TotalIn

TotalOut

RateIn

RateOut

cURL

Example

curl

Get

stats

for

the

currently

used

repo

Arguments

human

bool

Output

RepoSize

in

MiB

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

NumObjects

RepoSize

RepoPath

string

Version

string

StorageMax

cURL

Example

curl

List

interface

listening

addresses

Arguments

This

endpoint

takes

no

arguments

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

List

local

addresses

Arguments

id

bool

Show

peer

ID

in

addresses

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

Open

connection

to

a

given

address

Arguments

arg

string

Address

of

peer

to

connect

to

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

Close

connection

to

a

given

address

Arguments

arg

string

Address

of

peer

to

disconnect

from

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

Add

an

address

filter

Arguments

arg

string

Multiaddr

to

filter

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

Remove

an

address

filter

Arguments

arg

string

Multiaddr

filter

to

remove

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Strings

string

cURL

Example

curl

List

peers

with

open

connections

Arguments

verbose

bool

display

all

extra

information

Required

no

streams

bool

Also

list

information

about

open

streams

for

each

peer

Required

no

latency

bool

Also

list

information

about

latency

to

each

peer

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Peers

Addr

string

Peer

string

Latency

string

Muxer

string

Streams

Protocol

string

cURL

Example

curl

Import

a

tar

file

into

ipfs

Arguments

arg

file

Tar

file

to

add

Required

yes

Request

Body

Argument

file

is

of

file

type

This

endpoint

expects

a

file

in

the

body

of

the

request

as

multipartformdata

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

Name

string

Hash

string

Bytes

Size

string

cURL

Example

curl

F

filemyfile

Export

a

tar

file

from

IPFS

Arguments

arg

string

ipfs

path

of

archive

to

export

Required

yes

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Arguments

arg

string

Arguments

for

subcommand

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

This

endpoint

returns

a

textplain

response

body

cURL

Example

curl

Show

ipfs

version

information

Arguments

number

bool

Only

show

the

version

number

Required

no

commit

bool

Show

the

commit

hash

Required

no

repo

bool

Show

repo

version

Required

no

all

bool

Show

all

version

information

Required

no

Response

On

success

the

call

to

this

endpoint

will

return

with

and

the

following

body

cURL

Example

curl

B I O O O O O O O O B I O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O