Description de la déclaration CNRPS 1. Introduction La  Caisse Nationale de Retraite et de Prévoyance Sociale (CNRPS)  exige des établissements affiliés la transmission périodique de fichiers de déclaration contenant les données des employés et de leurs rémunérations. Cette documentation décrit la structure, les champs, les codes, et les règles de formatage nécessaires pour générer un fichier texte conforme aux spécifications CNRPS. 2. Structure Générale du Fichier de Déclaration Le fichier de déclaration est un  fichier texte (TXT) à largeur fixe , où chaque ligne représente un enregistrement (un employé) et chaque champ occupe une position précise en nombre de caractères. · Encodage  : ASCII ou UTF-8 selon spécification. · Séparation  : Aucun séparateur, alignement par position fixe. · Longueur totale  : 2069 caractères par ligne (selon la feuille CNRPS). 3. Structure Complète du Fichier de Déclaration 3.1. Section En-tête de l'établissement Cette section identifie l'organisme déclarant et définit la période de référence. Elle comprend le code établissement, le type de salaire, la période de paie et les informations relatives au détachement si applicable. Champ Type Taille Position Description Code Etablissement Number 10 1-10 Code de l'établissement (format "000000PPPP") Type Salaire Number 2 11-12 "01" pour personnel statutaire, "02" pour occasionnel Période Number 2 13-14 Type déclaration : "01-12" mensuel, "21-24" trimestriel, "13" annuel Année de la paie Number 4 15-18 Année de déclaration sur 4 chiffres Base de calcul de la paie Number 1 19 "1" calcul organisme origine, "2" calcul organisme détachement Code Etablissement d'origine Number 10 20-29 Code établissement d'origine "0000000OOOO" Code Etablissement de détachement Number 10 30-39 Code établissement de détachement "000000DDDD" 3.2. Section Identification de l'employé Ces champs contiennent les informations personnelles et d'identification de chaque assuré social, y compris ses coordonnées administratives de base. Champ Type Taille Position Description Identifiant Unique CNRPS Number 10 40-49 Identifiant unique à 10 chiffres de l'assuré social Nom Varchar 40 50-89 Nom de famille de l'agent Prenom Varchar 40 90-129 Prénom de l'agent Date Naissance Date 8 130-137 Date de naissance au format "JJMMAAAA" Sexe Varchar 1 138 "M" pour Masculin, "F" pour Feminin Lieu D'Affectation Number 4 139-142 Code du lieu de travail de l'agent Position administrative Number 2 143-144 Code correspondant à la position administrative actuelle DATE_EFFET_POSITION_ADM Date 8 145-152 Date d'effet de la position administrative "JJMMAAAA" Sous Position administrative Number 2 153-154 Code de la sous position administrative DATE_EFFET_SOUS_POS Date 8 155-162 Date d'effet de la sous position "JJMMAAAA" QUALITE_RECRUTEMENT Number 2 163-164 Code du mode de recrutement de l'agent Date effet qualite recrutement Date 8 165-172 Date d'effet du mode du recrutement "JJMMAAAA" Date Fin Contrat Date 8 173-180 Date de fin de contrat pour contractuels/occasionnels 3.3. Section Carrière et Situation professionnelle Cette partie décrit la situation professionnelle complète de l'agent, incluant son grade, fonction, catégorie et progression dans l'échelle hiérarchique. Champ Type Taille Position Description Grade Number 4 181-184 Code correspondant du grade en cours Date Effet Grade Date 8 185-193 Date d'effet du grade en cours "JJMMAAAA" Fonction Number 4 193-197 Code correspondant de la fonction en cours Date Effet Fonction Date 8 197-204 Date d'effet de la fonction "JJMMAAAA" Regime Number 2 205-206 "40" pour 40 heures, "48" pour 48 heures Categorie Classement Number 4 207-210 Code de la catégorie de classement en cours Date Effet Categorie Date 8 211-218 Date d'effet de la catégorie "JJMMAAAA" Code Categorie Professionnelle Number 4 219-222 Code de la catégorie professionnelle (A1,A2,B,C,D,U1,U2,U3) Date Effet Categorie Professionnelle Date 8 223-230 Date d'effet de la catégorie professionnelle "JJMMAAAA" Ordre Echelle Number 4 231-234 Code correspondant à l'ordre de l'échelle Code Echelle Number 4 235-238 Code correspondant à l'échelle Date Effet Echelle Date 8 239-246 Date d'effet de l'échelle en cours "JJMMAAAA" Echelon Number 4 247-250 Code correspondant à l'échelon Date Effet Echelon Date 8 251-258 Date d'effet de l'échelon en cours "JJMMAAAA" Niveau Number 4 259-262 Code correspondant au niveau en cours (par défaut "0000") Date Effet Niveau Date 8 263-270 Date d'effet du niveau "JJMMAAAA" (par défaut "00000000") Classe Number 4 271-274 Code correspondant de la classe en cours (par défaut "0000") Date Effet Classe Date 8 275-282 Date d'effet de la classe "JJMMAAAA" (par défaut "00000000") Classe Productive Number 4 283-286 Code de la classe productive (par défaut "0000") Date Effet Classe Productive Date 8 287-294 Date d'effet de la classe productive "JJMMAAAA" (par défaut "00000000") 3.4. Section Indemnités (20 occurrences répétées) Cette section permet de déclarer jusqu'à 20 indemnités différentes par agent. Chaque indemnité est décrite par son code, son montant et sa date d'effet. Champ Type Taille Position Description Code Indemnite (x20) Number 3 295-... Code de l'indemnité (voir table des indemnités) Montant Indemnite (x20) Number 12 ... Montant de l'indemnité sur 12 chiffres Date Effet indemnite (x20) Date 8 ...-754 Date d'effet du bénéfice de l'indemnité "JJMMAAAA" 3.5. Section Cotisations sociales obligatoires Ces champs contiennent les montants des cotisations sociales retenues sur le salaire et les subventions correspondantes versées par l'employeur. Champ Type Taille Position Description Cotisation Retraite Number 12 755-766 Montant de la cotisation du régime de retraite Cotisation CNAM Number 12 767-778 Montant de la cotisation CNAM Cotisation CD Number 12 779-790 Montant de la cotisation du CD Subevention Retraite Number 12 791-802 Montant de la subvention du régime de retraite Subevention CNAM Number 12 803-814 Montant de la subvention CNAM     3.6. Section Rappels (15 occurrences répétées) Cette partie permet de déclarer jusqu'à 15 rappels de paie. Chaque rappel comprend son code, montant, sens (plus/moins) et date d'effet. Champ Type Taille Position Description Code Rappel (x15) Number 3 815-... Code correspondant du rappel Montant Rappel (x15) Number 12 ... Montant du rappel sur 12 chiffres En plus (x15) Number 1 ... "1" pour rappel en plus, "2" pour rappel en moins Date Effet Rappel (x15) Date 8 ...-1174 Date d'effet du rappel "JJMMAAAA" 3.7. Section Cotisations des rappels Cotisations sociales calculées sur la base des rappels déclarés dans la section précédente. Champ Type Taille Position Description Cotisation Retraite Rappel Number 12 1175-1186 Montant cotisation retraite du rappel Cotisation CNAM Rappel Number 12 1187-1198 Montant cotisation CNAM du rappel Cotisation CD Rappel Number 12 1199-1210 Montant cotisation CD du rappel Subevention Retraite Rappel Number 12 1211-1222 Montant subvention retraite du rappel Subevention AM Rappel Number 12 1223-1234 Montant subvention CNAM du rappel       3.8. Section Retenues CNRPS (20 occurrences répétées) Cette section permet de déclarer jusqu'à 20 retenues sur salaire au profit de la CNRPS, principalement pour le remboursement de prêts et avances. Champ Type Taille Position Description Code Retenue (x20) Number 4 1235-... Code de la retenue (voir table des oppositions) Montant Retenue (x20) Number 12 ... Montant de la retenue prélevée Du (x20) Number 6 ... Date début de la retenue au format "MMAAAA" Au (x20) Number 6 ... Date fin de la retenue au format "MMAAAA" Réf CNRPS (x20) Varchar 13 ...-2054 Référence de la CNRPS pour la retenue 3.9. Section Information complémentaire Dernière section contenant le matricule interne de l'agent au sein de l'établissement déclarant. Champ Type Taille Position Description Matricule interne Varchar 15 2055-2069 Matricule de l'agent au niveau de l'établissement           4. Tables de Référence - Codes d'Équivalence 4.1. Table des Grades (الرتب) Cette table contient les codes CNRPS pour tous les grades du personnel maritime et portuaire de l'OMMP, avec leurs équivalents OMMP et traductions arabe/français. Code CNRPS Libellé Français Libellé Arabe Code OMMP 4109 manœuvre عامل يدوي 14441 331 manœuvre 1 er degré عامل يدوي درجة أولى 14442 334 manœuvre 2 eme degré عامل يدوي درجة ثانية 14443 338 manœuvre 3 eme degré عامل يدوي درجة ثالثة 14444 6211 manœuvre 4 eme degré عامل يدوي درجة رابعة 14445 2024 manœuvre 5 eme degré عامل يدوي درجة خامسة 14446 ... ... ... ...           4.2. Table des Indemnités (المنح) Correspondance des codes d'indemnités versées aux agents, incluant avantages en nature et primes spéciales. Code CNRPS Libellé Arabe Libellé Français Code OMMP 735 الأجر الأساسي Salaire de base 1 80 المنحة الخصوصية للإرشاد البحري Prime spécifique de pilotage 30 210 منحة الكيلومترية Voiture de fonction 70 12 منحة السكن Logement de fonction 71 363 منحة النقل indemnité de transport 105 4.3. Table des Fonctions (الخطط الوظيفية) Codes des postes d'encadrement et de direction au sein de l'OMMP. Code CNRPS Libellé Français Libellé Arabe Code OMMP 1209 directeur general adjoint مدير عام مساعد 2 1609 directeur central مدير مركزي 3 1065 directeur مدير 4 1080 chef de division رئيس دائرة 5 1073 chef de service رئيس مصلحة 6 1045 chef de section رئيس قسم 7 4.4. Table des Catégories de Classement (categ) Catégories hiérarchiques spécifiques à l'établissement 3002 (OMMP). Code_Etablissement Categorie_Classement 3002 1 3002 2 3002 3 ... ... 3002 17           4.5. Table des Échelons (ech echelon) Les 20 échelons hiérarchiques pour la gestion de carrière. Code Libellé Français 01 Echelon 1 02 Echelon 2 03 Echelon 3 ... ... 20 Echelon 20 4.6. Table des Périodes de Paie Codes des périodes de déclaration CNRPS. Code CNRPS Libellé Français 1 JANVIER 2 FEVRIER 3 MARS ... ... 13 13 EME MOIS (FIN D'ANNEE) 21 PRIME 1ER TRIMESTRE 4.7. Table des Types de Paie Classification des différents types de paie à déclarer. Code CNRPS Libellé CNRPS Code OMMP Libellé OMMP 1 PAIE NORMALE 0 salaire mensuel 1 PAIE NORMALE 2 Gratification de fin d'année 5 RAPPELS 5 Rappel rappel 2 PAIE DES CONTRACTUELS ? 4.8. Table des Localités Géographiques Extrait des codes géographiques des lieux de travail. Code Libellé Arabe Libellé Français 101 تونس المدينة TUNIS MEDINA 114 حلق الوادي TUNIS LA GOULETTE 115 المرسى TUNIS LA MARSA 301 بنزرت الشمالية BIZERTE NORD 1301 صفاقس المدينة SFAX SFAX MEDINA   4.9. Table des Positions Administratives Les cinq positions administratives principales. code_position libelle_francais libelle_arabe 1 En Activite مباشرة 2 En détachement إلحاق 3 Sous les drapeaux تحت السلاح 4 Disponibilite عدم مباشرة 5 Départ المغادرة 4.10. Table des Sous-Positions Administratives Détail des situations spécifiques par position. code_position code_sous_position libelle_francais libelle_arabe 1 8 Réintégration et reprise de l'activité إرجاع إلى حالة مباشرة 1 9 Mise à la disposition وضع على الذمة 1 4 Congé de maladie avec maintien du salaire عطلة مرض مع الإبقاء على كامل المرتب 2 1 Détachement auprès d'un Etablissement Public إلحاق لدى إدارة عمومية   4.11. Table des Statuts Liste exhaustive des statuts du personnel (extrait). Code Libellé 0 En instance de recrutement 1 Permanent titulaire plein-temps 4 Permanent stagiaire 7 Retraité 9 Détaché auprès de l'OMMP 24 Contrat à durée déterminée 4.12. Table des Modes de Recrutement Types de recrutement reconnus. code_mode_recrutement libelle_français libelle_arabe 1 PERMANENT قار / مترسم 2 STAGIAIRE متربص 3 OCCASIONNEL عرضي 4 CONTRACTUEL متعاقد 5 TEMPORAIRE وقتي 4.13. Table des Oppositions sur Salaire Codes des retenues sur salaire au profit de la CNRPS. Code CNR Libellé Français Libellé Arabe Code OMMP 20 PRET PERSONNEL قرض شخصي 467 25 PRET VEHICULE قرض سيارة 473 30 PRET LOGEMENT قرض سكن 468 91 PRET UNIVERSITAIRE قرض جامعى 528 4.14. Table des Natures des Services Classification des périodes de service pour calcul des droits à retraite. code nature Nature des services نوعية الخدمات 1 Services effectifs cotisés خدمات فعلية تم خلاص المساهمات 2 Services validés et cotisés bonifiés فترات موضوع ضم خدمات قابلة للتنفيل 16 services militaires obligatoire خدمات عسكرية إجبارية 5. Notes d'Utilisation 1. Validation des codes  : Toujours vérifier que le code utilisé existe dans la table correspondante 2. Format  : Respecter les tailles de champ et l'alignement (droite pour nombres, gauche pour textes) 3. Valeurs par défaut  : Utiliser "0000" ou "00000000" pour les champs non traités 4. Correspondance  : Privilégier les codes CNRPS pour la déclaration officielle 5. Complétude  : Remplir tous les champs requis, même avec des valeurs par défaut si nécessaire 6. Exemple de Ligne Générée text 00000030010120241 0000003002 1234567890DUPONT JEAN 01121965M101101202401012024010120241010120241010120241010120240000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000