---
title: "השוואת API של מקצרי קישורים: Bitly, Dub, Short.io, TinyURL"
url: https://uselinkpilot.com/he/blog/url-shortener-api-comparison
description: "ל-Dub חוויית המפתחים הטובה ביותר, ל-Bitly ה-API המוכח ביותר, Short.io הזול ביותר בנפחים גדולים, ו-LinkPilot הוא ה-API היחיד שיוצר גם קישורים סודיים."
lang: he
---

מעקב קישורים (https://uselinkpilot.com/he/blog/category/link-tracking)

# השוואת API של מקצרי קישורים: Bitly, Dub, Short.io, TinyURL

ל-Dub חוויית המפתחים הטובה ביותר, ל-Bitly ה-API המוכח ביותר, Short.io הזול ביותר בנפחים גדולים, ו-LinkPilot הוא ה-API היחיד שיוצר גם קישורים סודיים.

LinkPilot Team (https://uselinkpilot.com/he/author/linkpilot-team) · האנשים שבונים ומפעילים את LinkPilot ב-TetraCore, LLC 9 ביולי 2026 · עודכן 22 באוקטובר 2026 · על LinkPilot (https://uselinkpilot.com/he/about)

ל-Dub יש את חוויית המפתחים הטובה ביותר, ל-Bitly ה-API הנבדק ביותר בשטח בהיקף ארגוני, Short.io הזול ביותר בנפחים גדולים, ו-LinkPilot הוא ה-API היחיד של מקצר קישורים שיוצר גם קישורים סודיים עם מחיקה לאחר קריאה, בכל תוכנית כולל Free. ההשוואה בודקת אימות, מגבלות קצב, webhooks, SDK ומה כל רמת תמחור פותחת, כפי שפורסם ביולי 2026.

Image: רשימת הקישורים בסביבת עבודה של LinkPilot: לכל קישור מקוצר מוצגים סיומת הקישור בדומיין ממותג, היעד, מספר הקליקים, הסטטוס ותאריך היצירה. (https://uselinkpilot.com/screens/links-list.webp)

מה ש-API יוצר: אותה רשימת קישורים שמוצגת בלוח הבקרה, עם סיומת, יעד, קליקים וסטטוס לכל קישור.

אם הקישורים שלכם נוצרים בקוד (תהליכי הרשמה, כלים לקמפיינים, סקריפטים של CLI), ה-API הוא המוצר. ההשוואה הזאת בוחנת את ה-API של מקצרי הקישורים הגדולים כמו שמפתחים בוחנים אותם: אימות, מגבלות, webhooks, SDK ומה רמת התמחור פותחת. היכולות שלהלן נכונות לפי מה שפורסם ביולי 2026, ולכן בדקו בתיעוד של כל ספק לפני שאתם משלבים. בדף ה-API של מקצר הקישורים של LinkPilot (https://uselinkpilot.com/he/developers) תמצאו את נקודות הקצה, המגבלות וה-SDK, והדף מקצר קישורים עם דומיינים ממותגים (https://uselinkpilot.com/he/link-shortener) מתאר מה ה-API יוצר.

## באיזה API של מקצר קישורים כדאי להשתמש?

**Dub לחוויית מפתחים (קוד פתוח, SDK עם טיפוסים, תיעוד מודרני), Bitly להיקף ארגוני מוכח, Short.io לנפחים זולים עם כמה דומיינים, ו-LinkPilot אם אתם רוצים מפתחות API בהרשאות מוגדרות ו-webhooks חתומים בכל תוכנית בתשלום, ובנוסף את ה-API היחיד בקטגוריה שיוצר גם קישורים סודיים עם מחיקה לאחר קריאה.**

## איך ה-APIs משתווים במבט אחד?

| יכולת | Bitly | Dub | Short.io | TinyURL | LinkPilot |
| --- | --- | --- | --- | --- | --- |
| מודל אימות | OAuth או טוקני גישה | מפתחות API, SDK עם טיפוסים | מפתחות API | טוקני API | מפתחות בהרשאות מוגדרות (lp_live_*), שמורים כ-hash |
| קוד פתוח | לא | כן | לא | לא | לא |
| webhooks ואירועים | תלוי ברמה | ברמות הגבוהות | זמין | מוגבל | webhooks חתומים, בתוכניות בתשלום |
| באילו תוכניות יש API | רמות בתשלום | מהרמה החינמית ומעלה (עם מגבלת קצב) | מהרמה החינמית ומעלה (עם מגבלת קצב) | בתשלום | בכל תוכנית, כולל Free (מגבלת קצב לפי תוכנית) |
| דומיינים מותאמים דרך API | כן (בתשלום) | כן | כן | בתשלום | כן (בתשלום) |
| סודות ומחיקה לאחר קריאה דרך API | לא | לא | לא | לא | כן |

## מה הופך API ל"טוב" בקטגוריה הזאת?

ארבעה דברים קובעים אם ה-API של מקצר קישורים יישאר נוח לעבודה גם אחרי שלב הוכחת ההיתכנות:

1. **יצירת קישורים אידמפוטנטית.** הרצה חוזרת של משימה לא אמורה ליצור סיומות כפולות. חפשו תמיכה ב-upsert לפי סיומת או במזהה חיצוני.
2. **מגבלות קצב שקופות.** מספרים שמפורסמים, מגבלה לכל מפתח ותשובות 429 עם Retry-After, לא האטה שקטה.
3. **מסירת אירועים.** תשאול חוזר של מספרי הקליקים לא עומד בהיקף גדול; webhooks או זרמי אירועים עומדים בו. בדקו באותה הזדמנות גם את אימות החתימה.
4. **היגיינת מפתחות.** מפתחות בהרשאות מוגדרות שאפשר להחליף לכל אינטגרציה עדיפים על טוקן אחד שיכול הכול. (המפתחות של LinkPilot מתחילים ב-lp_live_ ונשמרים כ-hash של SHA-256, כך שדליפה ממסד הנתונים לא מאפשרת להשתמש בהם שוב.)

## במה כל ספק באמת טוב?

ל-**Bitly (https://dev.bitly.com/)** יש את ה-API הנבדק ביותר בשטח בקטגוריה: גרסה v4 יציבה כבר שנים, מגבלות הקצב מתועדות, והתמיכה הארגונית אמיתית. החיסרון: כל שימוש משמעותי ב-API נמצא ברמות בתשלום, וכמה יכולות זמינות רק בתוכנית הארגונית.

**Dub (https://dub.co/docs/api-reference/introduction)** הוא מה שרוב המפתחים ייהנו ממנו יותר מכול: ליבה בקוד פתוח, SDK עם טיפוסים ל-TypeScript, עיצוב REST נקי ותיעוד מודרני. אם אתם בונים תשתית קישורים בתוך מוצר, המוסכמות שלו הן הסטנדרט העדכני.

**Short.io (https://developers.short.io/)** הוא סוס עבודה: אימות פשוט במפתח, כמה דומיינים וגישה נדיבה ברמות הנמוכות. התיעוד שלו בסיסי יותר משל Dub, אבל היחס בין מחיר לנפח טוב.

**TinyURL** מציע API פשוט לקיצור בסיסי בתוכניות בתשלום. מספיק לסקריפטים, דל מדי לפלטפורמות.

**LinkPilot** מכסה את הבסיס המקובל: יצירה, קריאה, עדכון ומחיקה של קישורים עם סיומות ודומיינים מותאמים, שליפת סטטיסטיקות ששמות את הפרטיות במקום הראשון ו-webhooks חתומים לאירועי קליקים וקישורים. שני דברים מבדילים אותו: הגישה ל-API כלולה בכל תוכנית, כולל תוכנית Free, עם מכסות שעולות לפי הרמה במקום רמת "API" נפרדת; ואותה סביבת עבודה מספקת **קישורים סודיים** (פרטי התחברות עם מחיקה לאחר קריאה ויומן ביקורת). אם האוטומציה שלכם צריכה אי פעם למסור סיסמה לאדם (תהליכי הקצאה, קליטת עובדים, כלי תמיכה), תהליך העבודה השני הזה חוסך לכם שילוב של שירות סודות נפרד. את המפתחות מנהלים מהדף API Keys בלוח הבקרה, ושם נמצא גם התיעוד העדכני של נקודות הקצה. ראו מחירים (https://uselinkpilot.com/he/pricing) כדי לדעת מה כלול בכל תוכנית.

## מה ה-API של LinkPilot מאפשר בכל תוכנית?

המכסות, לפי דף המחירים (https://uselinkpilot.com/he/pricing) ב-22 באוקטובר 2026: תוכנית Free כוללת 1 מפתח API ו-60 בקשות לשעה; Pro כוללת 5 מפתחות ו-1,000 בקשות לשעה; Agency ו-Agency Plus כוללות 25 מפתחות ו-5,000 בקשות לשעה. המפתחות מתחילים בקידומת `lp_live_` ונשמרים כ-hash של SHA-256 בכל תוכנית, ולכן לוח הבקרה מציג מפתח פעם אחת בלבד, כשהוא נוצר, ודליפה ממסד הנתונים לא מאפשרת להשתמש בו שוב. אלה המספרים שכדאי לבדוק מולם ברשימה שלהלן. 60 הבקשות לשעה בתוכנית Free מספיקות כדי להוכיח שאינטגרציה עובדת, ולא מספיקות כדי להריץ אותה בפועל, וזו הכוונה.

## איך בוחנים API של מקצר קישורים באחר צהריים אחד?

1. **צרו את אותו קישור פעמיים.** אם הקריאה השנייה יוצרת סיומת שנייה, תצטרכו שכבת אידמפוטנטיות משלכם.
2. **עברו את מגבלת הקצב בכוונה.** אתם רוצים לקבל 429 Too Many Requests (https://www.rfc-editor.org/rfc/rfc6585#section-4) עם כותרת `Retry-After`, לא האטה שקטה ולא שגיאת 500.
3. **שלחו webhook לנקודת קצה לבדיקה** ואמתו את החתימה בעצמכם. אם אי אפשר לאמת אותה, התייחסו ל-webhook כקלט לא מהימן.
4. **החליפו מפתח בזמן שסקריפט רץ.** המפתח הישן צריך להפסיק לעבוד מיד, והחדש צריך לקבל את אותן הרשאות.
5. **שלפו בחזרה את הסטטיסטיקות של קישור** והשוו ללוח הבקרה. אי התאמה בין השניים היא הבאג שתבזבזו עליו שבוע בהמשך.
6. **עקבו אחרי קישור שנוצר בעזרת בודק ההפניות (https://uselinkpilot.com/he/tools/redirect-checker).** הפניה אחת היא התוצאה הנכונה; שתיים פירושן שדומיין מוגדר לא נכון.

## במה לבחור?

- **בניית תכונות קישורים בתוך המוצר שלכם:** Dub, או LinkPilot אם מסירת סודות היא חלק מהתהליך.
- **תשתית קמפיינים ארגונית:** Bitly.
- **אוטומציה בנפח גבוה ובתקציב מוגבל:** Short.io.
- **סקריפטים מדי פעם:** TinyURL או כל רמה חינמית.

שני כלים קשורים לשלב הבדיקה: בודק ההפניות (https://uselinkpilot.com/he/tools/redirect-checker) החינמי שלנו עוקב אחרי כל שרשרת ההפניות שהקישורים שנוצרו דרך ה-API מייצרים (שימושי כדי לתפוס הפניות כפולות שפוגעות בביצועים), ומקצר הקישורים (https://uselinkpilot.com/he/tools/url-shortener) מאפשר לבדוק את התנהגות ההפניה של LinkPilot בלי לכתוב שורת קוד. להשוואות ברמת המוצר שעליהן מבוסס המאמר, ראו LinkPilot מול Dub (https://uselinkpilot.com/he/compare/linkpilot-vs-dub) וLinkPilot מול Bitly (https://uselinkpilot.com/he/compare/linkpilot-vs-bitly).

## מקורות

- Bitly, API documentation (https://dev.bitly.com/).
- Dub, API reference (https://dub.co/docs/api-reference/introduction).
- Short.io, Developer documentation (https://developers.short.io/).
- IETF, RFC 6585: Additional HTTP Status Codes, section 4, 429 Too Many Requests (https://www.rfc-editor.org/rfc/rfc6585#section-4).

## כלים למאמר הזה

מקצר קישורים חינמי

הפכו כתובת URL ארוכה לקצרה, עם הסיומת שתבחרו.
https://uselinkpilot.com/he/tools/url-shortener

גרסאות: מקצר קישורים לביו ב-TikTok (https://uselinkpilot.com/he/tools/url-shortener/tiktok-bio) · מקצר קישורים לביו ב-Instagram (https://uselinkpilot.com/he/tools/url-shortener/instagram-bio) · מקצר קישורים לפוסטים ב-LinkedIn (https://uselinkpilot.com/he/tools/url-shortener/linkedin-post) · מקצר קישורים ל-X (Twitter) (https://uselinkpilot.com/he/tools/url-shortener/twitter)

בודק הפניות

מעקב אחרי שרשרת ההפניות המלאה של כל כתובת URL.
https://uselinkpilot.com/he/tools/redirect-checker

גרסאות: בודק הפניות לקישורי שותפים (https://uselinkpilot.com/he/tools/redirect-checker/affiliate-links) · בדיקת הפניות ל-SEO (https://uselinkpilot.com/he/tools/redirect-checker/seo-audit)

בודק הקלקות על קישורים

הקלקות, מקורות הפניה ומיקומים של קישור מקוצר.
https://uselinkpilot.com/he/tools/link-analytics

הצעות לקישורים חכמים

הצעות AI לשמות, לסדר בפרמטרי UTM ולדומיינים ממותגים.
https://uselinkpilot.com/he/tools/smart-link-suggestions

## שאלות נפוצות

### לאיזה מקצר קישורים יש את ה-API הטוב ביותר?

### יש API חינמי למקצר קישורים?

### האם APIs של מקצרי קישורים תומכים ב-webhooks?

### אפשר ליצור קישורים סודיים עם מחיקה לאחר קריאה דרך API?

## קישורים חכמים יותר עם LinkPilot

מעקב, UTM, קודי QR, תובנות AI ודוחות white-label בסביבת עבודה אחת. ההתחלה בחינם.

פתיחת חשבון בחינם (https://uselinkpilot.com/signup)

## לקריאה נוספת

מעקב קישורים

### מחירי Bitly: מגבלות Free והתוכניות בתשלום (2026)

לפי הדיווחים,התוכנית החינמית של Bitly מוגבלת ל-10 קישורים בחודש, ו-Growth מתחילה באזור אמצע טווח ה-$30. מה נעול בכל תוכנית ואיך החשבון יוצא מול החלופות.
https://uselinkpilot.com/he/blog/bitly-pricing-explained

מעקב קישורים

### חלופות ל-Bitly: תוכניות חינמיות ודומיינים מותאמים (2026)

החלופה הטובה ביותר ל-Bitly נותנת דומיין משלכם וסטטיסטיקות אמיתיות במחיר שמתאים לכם: LinkPilot, Dub, Short.io או Rebrandly. שישה כלים בהשוואה.
https://uselinkpilot.com/he/blog/best-bitly-alternatives

אבטחה

### OneTimeSecret, Privnote או Password Pusher: במה לבחור?

Password Pusher לצוותי IT, OneTimeSecret לסודות פשוטים בקוד פתוח, Privnote רק לפתקים זמניים: השוואה של הצפנה, תפוגה וביטול קישורים.
https://uselinkpilot.com/he/blog/onetimesecret-vs-privnote-vs-password-pusher

## Structured data

```json
[
  {
    "@context": "https://schema.org",
    "@type": "BreadcrumbList",
    "itemListElement": [
      {
        "@type": "ListItem",
        "position": 1,
        "name": "דף הבית",
        "item": "https://uselinkpilot.com/he"
      },
      {
        "@type": "ListItem",
        "position": 2,
        "name": "בלוג",
        "item": "https://uselinkpilot.com/he/blog"
      },
      {
        "@type": "ListItem",
        "position": 3,
        "name": "השוואת API של מקצרי קישורים: Bitly, Dub, Short.io, TinyURL",
        "item": "https://uselinkpilot.com/he/blog/url-shortener-api-comparison"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "BlogPosting",
    "@id": "https://uselinkpilot.com/he/blog/url-shortener-api-comparison#article",
    "headline": "השוואת API של מקצרי קישורים: Bitly, Dub, Short.io, TinyURL",
    "description": "ל-Dub חוויית המפתחים הטובה ביותר, ל-Bitly ה-API המוכח ביותר, Short.io הזול ביותר בנפחים גדולים, ו-LinkPilot הוא ה-API היחיד שיוצר גם קישורים סודיים.",
    "inLanguage": "he",
    "datePublished": "2026-07-09",
    "dateModified": "2026-10-22",
    "image": "https://uselinkpilot.com/logo-512.png",
    "author": {
      "@type": "Organization",
      "@id": "https://uselinkpilot.com/author/linkpilot-team#organization",
      "name": "LinkPilot Team",
      "url": "https://uselinkpilot.com/he/author/linkpilot-team"
    },
    "publisher": {
      "@type": "Organization",
      "name": "LinkPilot",
      "url": "https://uselinkpilot.com",
      "logo": {
        "@type": "ImageObject",
        "url": "https://uselinkpilot.com/logo-512.png",
        "width": 512,
        "height": 512
      }
    },
    "mainEntityOfPage": {
      "@type": "WebPage",
      "@id": "https://uselinkpilot.com/he/blog/url-shortener-api-comparison"
    }
  },
  {
    "@context": "https://schema.org",
    "@type": "FAQPage",
    "mainEntity": [
      {
        "@type": "Question",
        "name": "לאיזה מקצר קישורים יש את ה-API הטוב ביותר?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "ל-Dub יש את חוויית המפתחים החזקה ביותר (קוד פתוח, SDK עם טיפוסים, תיעוד מודרני). ה-API v4 של Bitly הוא הנבדק ביותר בשטח בהיקף ארגוני. ה-API של LinkPilot כלול בכל תוכנית, כולל Free, עם מפתחות בהרשאות מוגדרות ותהליך עבודה לסודות שאף API אחר של מקצר קישורים לא מציע."
        }
      },
      {
        "@type": "Question",
        "name": "יש API חינמי למקצר קישורים?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "רוב הספקים מציעים את ה-API שלהם בתוכניות החינמיות או הזולות, עם מגבלות קצב. ב-Dub וב-Short.io משתמשים לרוב בחינם לנפחים קטנים, ול-TinyURL יש API פשוט בתוכניות בתשלום. בדקו את המגבלות העדכניות של כל ספק; מכסות API חינמיות משתנות לעיתים קרובות."
        }
      },
      {
        "@type": "Question",
        "name": "האם APIs של מקצרי קישורים תומכים ב-webhooks?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "לא כולם. webhooks לאירועי קליקים או קישורים הם התכונה שצריך לבדוק לפני שמתחייבים: LinkPilot מספק webhooks חתומים בתוכניות בתשלום, Dub מציע הזרמת אירועים בתוכניות הגבוהות, ואצל האחרים זה משתנה. ודאו מול כל ספק מה היכולת העדכנית."
        }
      },
      {
        "@type": "Question",
        "name": "אפשר ליצור קישורים סודיים עם מחיקה לאחר קריאה דרך API?",
        "acceptedAnswer": {
          "@type": "Answer",
          "text": "מבין מקצרי הקישורים הכלליים, LinkPilot הוא זה שמספק גם קישורים מקוצרים וגם קישורים סודיים עם מחיקה לאחר קריאה, מאותה סביבת עבודה ומאותו API. כלים ייעודיים כמו Password Pusher מציעים גם הם API לסודות, בלי החלק של קיצור הקישורים."
        }
      }
    ],
    "inLanguage": "he"
  },
  {
    "@context": "https://schema.org",
    "@type": "SoftwareApplication",
    "@id": "https://uselinkpilot.com/#software",
    "name": "LinkPilot",
    "applicationCategory": "BusinessApplication",
    "operatingSystem": "Web",
    "description": "LinkPilot is a secure link management platform for creating branded short links, tracking engagement, and sharing secrets with expiring, protected, self-destructing links.",
    "url": "https://uselinkpilot.com",
    "offers": [
      {
        "@type": "Offer",
        "name": "Free",
        "price": "0",
        "priceCurrency": "USD",
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Pro",
        "price": "29",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "29",
          "priceCurrency": "USD",
          "billingDuration": "P1M"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency",
        "price": "299",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "299",
          "priceCurrency": "USD",
          "billingDuration": "P1M"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency Plus",
        "price": "799",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "799",
          "priceCurrency": "USD",
          "billingDuration": "P1M"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Pro (yearly)",
        "price": "288",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "288",
          "priceCurrency": "USD",
          "billingDuration": "P1Y"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency (yearly)",
        "price": "2988",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "2988",
          "priceCurrency": "USD",
          "billingDuration": "P1Y"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Agency Plus (yearly)",
        "price": "7980",
        "priceCurrency": "USD",
        "priceSpecification": {
          "@type": "UnitPriceSpecification",
          "price": "7980",
          "priceCurrency": "USD",
          "billingDuration": "P1Y"
        },
        "url": "https://uselinkpilot.com/pricing"
      },
      {
        "@type": "Offer",
        "name": "Enterprise",
        "priceSpecification": {
          "@type": "PriceSpecification",
          "priceCurrency": "USD"
        },
        "url": "https://uselinkpilot.com/pricing"
      }
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "Organization",
    "@id": "https://uselinkpilot.com/#organization",
    "name": "LinkPilot",
    "alternateName": "LinkPilot by TetraCore",
    "url": "https://uselinkpilot.com",
    "contactPoint": {
      "@type": "ContactPoint",
      "contactType": "customer support",
      "email": "support@uselinkpilot.com",
      "url": "https://uselinkpilot.com/support"
    },
    "parentOrganization": {
      "@type": "Organization",
      "@id": "https://tetracorehq.com/#organization",
      "name": "TetraCore",
      "url": "https://tetracorehq.com/"
    },
    "logo": {
      "@type": "ImageObject",
      "url": "https://uselinkpilot.com/logo-512.png",
      "width": 512,
      "height": 512
    },
    "description": "LinkPilot is a secure link management platform for creating branded short links, tracking engagement, and sharing secrets with expiring, protected, self-destructing links.",
    "sameAs": [
      "https://x.com/uselinkpilot",
      "https://www.linkedin.com/company/uselinkpilot",
      "https://facebook.com/uselinkpilot",
      "https://github.com/TetraCoreHQ/linkpilot-cli",
      "https://github.com/TetraCoreHQ/linkpilot-mcp",
      "https://www.npmjs.com/package/linkpilot",
      "https://www.npmjs.com/package/@uselinkpilot/sdk",
      "https://www.npmjs.com/package/@uselinkpilot/mcp",
      "https://chromewebstore.google.com/detail/linkpilot-short-links-and/mnmppadihpcncicldpkmgknhnjkondad",
      "https://addons.mozilla.org/en-US/firefox/addon/uselinkpilot/"
    ]
  },
  {
    "@context": "https://schema.org",
    "@type": "WebSite",
    "name": "LinkPilot",
    "url": "https://uselinkpilot.com",
    "potentialAction": {
      "@type": "SearchAction",
      "target": "https://uselinkpilot.com/blog?q={search_term_string}",
      "query-input": "required name=search_term_string"
    }
  }
]
```