LLMアプリケーションの安全性を脅かすPrompt Injection攻撃は、2024年以降急速に攻撃手口を高度化させています。私のチームでは本番環境にLLMを統合してから18ヶ月、累計500万回以上のAPIコールを処理する中で、様々な攻撃パターンに対応してきました。本稿では、実際の攻撃事例を再現したテスト環境と、防御アーキテクチャの構築方法について詳細に解説します。
Prompt Injectionとは:攻撃メカニズムの深層解析
Prompt Injectionは、LLMの処理内容を外部から注入された悪意のある指示で乗っ取る攻撃手法です。従来のSQLインジェクション相比類のない特徴として、「モデルの推論プロセス自体を悪用する」という点が異なります。
攻撃の3分類
- 直接インジェクション:ユーザー入力を直接操作して、システムプロンプトの境界を突破
- 間接インジェクション:外部ソース(URL、ファイル)から悪意のあるコンテンツを読み込ませる
- コンテキスト毒的注入:長期記憶やナレッジベース悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄悄