ライブラリ

ライブラリ: library)は、汎用性の高い複数のプログラムを再利用可能な形でひとまとまりにしたものである。ライブラリと呼ぶときは、それ単体ではプログラムとして動作させることはできない、つまり実行ファイルではない場合がある。ライブラリは他のプログラムに何らかの機能を提供するコードの集まりと言える。ソースコードの場合と、オブジェクトコード、あるいは専用の形式を用いる場合とがある。たとえば、UNIXのライブラリはオブジェクトコードをarと呼ばれるアーカイブツール(アーカイバ)でひとまとめにして利用する。図書館(: library)と同様にプログラム(算譜)の書庫であるので、索引方法が重要である。

また、ソフトウェア以外の再利用可能なものの集合について使われることもある(音声データなど)。

動的リンク

動的リンク (: dynamic linking) は、あるライブラリ内のデータ(コードを含む)を新たな実行ファイルのビルド時にコピーすることはなく、ディスク上に別のファイルとして存在している。ビルド時にリンカが行うのは、その実行ファイルが必要とするのがどのライブラリのどの部分であるか(関数名やインデックス)を記録するだけである。リンク作業の大部分はそのアプリケーションがメモリ上にロードされたときか、実行時である。リンクを行うプログラムコードはローダ: loader)と呼ばれ、実際にはオペレーティングシステム (OS) の一部と見なされる。適当な時点でローダは必要なライブラリをディスク上で見つけてプロセスのメモリ空間に(追加のデータ空間と共に)マッピングする。OSによってはプロセスが実行開始する前でないとライブラリをリンクできないものもあるが、多くのOSではプロセス実行時に実際にライブラリを参照したときにリンクできる。後者は「遅延読み込み」などと呼ばれる。どちらの場合もライブラリは動的リンクライブラリダイナミックリンクライブラリ)と呼ばれる。Windows環境では動的リンクライブラリの略称でもある「DLL」という呼び方が一般的であり、動的ライブラリのファイル拡張子は通例 .dll である[1]。動的リンクライブラリの中でも、システム上の複数の実行プログラムによって共有・再利用されうるものを、共有ライブラリ(シェアードライブラリ)と呼ぶ。

ローダの処理は、メモリ上の各ライブラリの位置が実際にロードされるまで確定しないため、ちょっとしたトリックを必要とする。ディスク上のファイル内に絶対アドレスを書きこんでおくことはDLL内であっても不可能である。理論的にはメモリにロードされたときにライブラリを参照している部分を全て書き換えて正しいメモリ上の位置を参照するようにすることはできるが、それによって消費される時間とメモリは無視できない。その代わりに多くの動的リンクシステムではアドレス欄が空欄となったシンボルテーブルをコンパイル時に用意する。ライブラリへの参照は全てこのシンボルテーブルを経由して行われる(コンパイラはシンボルテーブルからアドレスを取り出して使うコードを生成する)。メモリにロードされたとき、ローダがこのテーブルを書き換える。

ライブラリも全メソッド(関数、サブルーチン)のテーブルを持っている。ライブラリに入ってくるときは、このテーブルを経由して各ルーチンにジャンプする。これによってライブラリのルーチンコールにオーバーヘッドが発生するが、通例それは無視できるほど小さい。

動的リンカ・ローダは機能面で様々なものがある。いくつかの場合、実行ファイルに格納された明示的なライブラリパスに依存し、ライブラリ名やディスク上の配置を変更するとシステムが作動できなくなる。より一般的な手法としてはライブラリ名だけを実行ファイルに格納し、OSが何らかのアルゴリズムでディスク上のライブラリを検索する。Unix系システムでは、ライブラリを探す場所(ディレクトリ)を構成ファイルにリストアップしておく。ライブラリ開発者はそこに書かれたディレクトリにライブラリを配置することを推奨される。しかし、この方法では新しいライブラリをインストールする際に問題が発生しやすく、共通のディレクトリにあまりにも多くのライブラリが置かれることとなって管理を難しくする。Windowsではレジストリを使ってCOMコンポーネントやActiveX DLLの場所を決めているが、標準DLLでは、

  1. アプリケーションの実行ファイルの存在するディレクトリ
  2. SetDllDirectory()で指定されるディレクトリ(Windows XP SP1以降でサポート)
  3. システムディレクトリ (NT系ではSystem32)
  4. 16ビットシステムディレクトリ (System)
  5. Windowsディレクトリ
  6. カレントディレクトリ
  7. PATH環境変数

で示されるディレクトリを探す(古いバージョンではカレントディレクトリが2番目だった)[2]OPENSTEPはもっと柔軟なシステムを使用していて、ライブラリの探索リストを保持している。しかし不正なDLLが探索の上位に置かれていると実行ファイルは不正動作する可能性がある。Windowsではこれが「DLL地獄」(: DLL hell)と呼ばれ、よく知られている問題である。

Windows XPからはSide-by-Sideアセンブリ(DLL署名、WinSxS)というメカニズムが追加された。これは動的リンク時にライブラリのファイル名ではなく、ライブラリにつけられた署名によってリンクすべきライブラリを決定するものである。これにより、同じファイル名を持つが異なる実装を持つライブラリを同時に使い分ける事ができる。よくあるパターンとして、ソースコードから改変・ビルドされたランタイムライブラリをシステムにインストールする場合にこのメカニズムが有効に働く。システムにインストールされたライブラリはライブラリ探索リスト上比較的上位に存在するが、署名が一致するプログラムにのみロードされるのでDLL地獄は今後解消されるであろうと考えられる。しかし、この機構には一つの弱点がある。それはシステムライブラリをオーバーライドして独自機能を実装する時、この機構は役に立たない方向へ働く。その様な実装をする時には、故意にマニフェスト機能を無効にしてライブラリを作らなくてはならない。もっとも、そのようなアプローチは、システムファイル保護機能が搭載されたWindows 2000のリリース時点で時代遅れであり、Windows Vistaに至っては管理者と言えどもシステムライブラリを書き換える事は出来なくなっている。

動的ライブラリの起源は定かではないが、少なくとも1960年代後半のMTS (Michigan Terminal System) まで遡ることができる ("A History of MTS", Information Technology Digest, Vol. 5, No. 5)。

動的読み込み

動的読み込み (: dynamic loading) は動的リンクの下位カテゴリであり、ビルド時にリンク(暗黙的リンク、: implicit linking)されたもの以外のダイナミックリンクライブラリを、実行中のプログラムが明示的にロードすることである。明示的リンク (: explicit linking) と呼ばれることもある[3]。この場合、ライブラリはプラグインモジュールとして使われるのが一般的で、表計算プログラムのadd-inや特定機能を実現するインタプリタなどが典型的である。

動的ライブラリをサポートしているシステムは、モジュールの動的読み込みAPIもサポートしているのが一般的である。例えばWindowsではLoadLibrary()GetProcAddress()が用意されていて、Unix系システムではdlopen()dlsym()が用意されている。いくつかの開発環境ではこの処理を自動化している。逆に、不要になったモジュールを解放(アンロード)するAPI(FreeLibrary()dlclose())も用意されている。これらのAPIは、特にユーザーによる機能拡張を可能とするプラグインシステムをアプリケーション内に実装することにも役立つ。

.NET Frameworkでは、ライブラリのアセンブリは必要となったタイミングで動的かつ自動的にロードされる遅延読み込みが基本であるが、アセンブリの明示的なアンロードはできない。P/Invokeも同様である。.NET 4以降ではプラグインシステムの実装を容易にするManaged Extensibility Framework英語版がサポートされるようになった。

リモートライブラリ

もうひとつのライブラリの形態として完全に分離された実行ファイルを遠隔手続き呼出し (RPC) と呼ばれる方法で接続するものがある。このアプローチではOSの再利用が最大に生かされる。つまり、ライブラリサポートのためのコードはアプリケーションサポートのコードやセキュリティサポートのコードと共通化できる。さらに、このライブラリはネットワークを経由した別のマシン上に存在しても構わない。

欠点はライブラリコールの度に無視できないオーバーヘッドが発生することである。RPCは非常にコストがかかり、可能な限り排除されてきた。しかし、このアプローチは特定分野で一般化しつつある。特にクライアントサーバシステムやEnterprise JavaBeansのようなアプリケーションサーバで一般的である。

共有ライブラリ

動的か静的かとは別に、ライブラリはプログラム間で共有される方式でも分類される。動的ライブラリは何らかの共有をサポートしており、複数のプログラムが同時に同じライブラリを使用することができる。静的ライブラリは各プログラムにリンクされるため、共有することはできない。

共有ライブラリ: shared library)はやや曖昧な用語であり、ふたつの概念を含む。第一はディスク上のコードを複数の無関係なプログラムが共有することを意味する。第二の概念はメモリ上のコードの共有であり、ライブラリのロードされた物理メモリページが複数のプロセスのアドレス空間にマップされ、同時にアクセスされることを意味する。一般に後者を共有ライブラリと称するのが推奨され[要出典]、この方式には様々な利点がある。例えばOPENSTEPでは、アプリケーションの多くは数百Kバイトで即座にロード可能であり、その機能の大部分はライブラリ上に実装されていて、共有可能であるためにOSが別のプログラム用にメモリにロードしたコードイメージがそのまま使用できる。しかし、マルチタスク環境で共有されるコードは特別な配慮が必要であり、そのために性能が若干低下する。

メモリ上の共有ライブラリはUNIXでは位置独立コード (PIC) を使って実現される。これは柔軟なアーキテクチャだが複雑であり、Windowsなどでは使われていない。Windowsなどは、DLL毎にマップすべきアドレスを事前に決めておくなどしてメモリ上で共有可能にしている。WindowsのDLLはUNIXから見れば共有ライブラリではない[4]

最近[いつ?]のOSでは共有ライブラリは通常の実行ファイルと同じ形式になっている。これにはふたつの利点がある。第一はひとつのローダで両方をロードできる。それによってローダが若干複雑化するが、十分コストに見合う程度である。第二はシンボルテーブルさえあれば実行ファイルを共有ライブラリとして使うことができる点である。このようなファイル形式として、ELF (UNIX) と PE (Windows) がある。また、Windowsではフォントなどのリソースも同じファイル形式になっている。OPENSTEPでもほとんど全てのシステムリソースが同じファイル形式になっている。

DLLという用語はWindowsやOS/2で主に使われる。UNIXでは「共有ライブラリ」が一般的である。

マルチスレッド環境下でライブラリを使用するにあたっては、別の共有問題が発生する。ライブラリルーチンがデータ領域としてスタックのみを使う場合は問題ないが、ライブラリ内のデータ領域を使う場合、そのデータ領域がスレッド毎に用意されていないことが多い。したがって、そのようなライブラリルーチンを使う場合、実行ファイル側で同時に複数のスレッドが同じライブラリルーチンを使わないように注意しなければならないことがある。

オブジェクトライブラリ

1980年代終盤に開発された動的リンクは1990年代初期にはほとんどのOSで使用可能となった。ほぼ同時期にオブジェクト指向プログラミング (OOP) が市場に出回り始めた。OOPは従来のライブラリが提供していなかった情報を必要とした。それは、あるオブジェクトが依存しているオブジェクトのリストである。これはOOPの継承という機能の副作用であり、あるメソッドの完全な定義は複数の場所に分散して配置される可能性がある。これは単純化すればライブラリ間の依存関係ということになるが、真のOOPシステムではコンパイル時には依存関係が明らかでなく、そのために様々な解決方法が登場した。

同じころ、多層構造のシステムの考え方も出てきた。デスクトップコンピュータ上の表示プログラムが汎用コンピュータ(汎用機)やミニコンピュータ記憶装置や演算機能を利用するものである。例えばGUIベースのコンピュータがミニコンピュータにメッセージを送り、表示すべき膨大なデータの一部を得るというものが考えられた。RPCは既に使われていたが、それは標準化されていなかった。

主要な汎用機およびミニコンメーカーがこれら二つの問題に関してプロジェクトを結成し、どこでも使えるOOPライブラリ形式を開発した。このようなシステムをオブジェクト・ライブラリ: object library)と呼んだり、リモートアクセスが可能ならば分散オブジェクト: distributed objects)と呼ぶ。マイクロソフトCOMは分散機能のないオブジェクトライブラリであり、DCOMはリモートアクセスを可能としたバージョンである。

一時期、オブジェクトライブラリはプログラミングの世界の「次の大きな出来事」とされた。様々なシステムが開発され競争も激化した。例をあげると、IBMのSOM/DSOM、サン・マイクロシステムズのDOE、NeXTのPDO、DECの ObjectBroker、マイクロソフトのComponent Object Model (COM/DCOM)、そして様々なCORBAベースのシステムがある。

結局、OOPライブラリは次の大きな出来事ではなかった。マイクロソフトのCOMとNeXT(現在はApple)のPDO以外は、ほとんど使われることも無くなったのである。

Javaではオブジェクトライブラリとして主にJARが使われている。その中には(圧縮された)クラスバイトコード形式が格納されていて、Java仮想マシンや特殊なクラスローダーがそれをロードする。

命名規則

GNU/LinuxSolarisBSDの派生OS

ライブラリのファイル名は常に接頭辞libで始まり、拡張子として.a(静的ライブラリ)あるいは.so(ダイナミックリンクライブラリ)が使用される。オプションとして多重拡張子によるインタフェース番号が付与される場合がある。例えば、libfoo.so.2libfooライブラリの二番目のメジャーなインタフェース番号の付いたダイナミックリンクライブラリである。古いUNIXではマイナー番号も使っている場合がある (libfoo.so.1.2) が、最近[いつ?]のUNIXではメジャー番号しか使っていない。ライブラリのうち、共有ライブラリは/lib/usr/lib/usr/local/libなどのディレクトリに置かれる。動的にロードされたライブラリは/usr/libexecなどのディレクトリに置かれる。ライブラリのディレクトリにある .la ファイルは libtool英語版 アーカイブである。

macOS

ライブラリの命名規則はBSDを踏襲していて、動的ライブラリの拡張子には.dylibが使われるが、代わりに.soを使うこともできる。しかし、多くの動的ライブラリは「バンドル(: bundles)」と呼ばれる特別な場所(パッケージ)に置かれ、ライブラリに関連するファイルやメタデータもそこに置かれる。例えば、"My Neat Library" というライブラリは "My Neat Library.framework" というバンドルに実装される。

Microsoft Windows

Windowsではライブラリのファイル名に対する厳格な命名規則はないが、いくつかの拡張子が用意されている。C言語/C++では.libという拡張子を持つファイルがビルド時にリンカによって使用されるが、これには2つの種類がある。ひとつは静的ライブラリで、もうひとつはDLLのインポートライブラリである。ダイナミックリンクライブラリには通例.dllという拡張子が付けられる。インタフェースのリビジョンはファイル内にリソースとして書きこまれるか、COMインタフェースを使って抽象化される。また、.NET Frameworkのアセンブリについては、内部のマニフェストに記述される。

脚注

  1. ^ LightWaveプラグインの .pActiveX.ocx など、アプリケーションやフレームワークによっては別の拡張子が使われることもある。
  2. ^ Dynamic-Link Library Search Order” (英語). MSDNライブラリ (2008年11月6日). 2008年11月11日閲覧。
  3. ^ Link an executable to a DLL | Microsoft Docs
  4. ^ UNIXでもライブラリのマップすべきアドレスを決めている場合がある。ただしそれは性能向上目的であり、基本的にはPIC化されている。

関連項目

Read other articles:

Lingkungan merupakan salah satu objek kajian utama di geografi Dr. Luthfi Muta’ali, MT, salah satu ahli Geografi Pembangunan Indonesia. Geografi pembangunan (bahasa Inggris: development geography) adalah cabang disiplin ilmu geografi yang mempelajari ataupun mengkaji keterkaitan antara proses pembangunan suatu wilayah dengan kondisi alam serta penduduk wilayah tersebut. Geografi pembangunan mempelajari aspek keruangan geografi (alam semesta dengan segala isinya). Geografi pembangunan di...

 

سلفادوكسين/بيرميثامين مزيج من Sulfadoxine سلفوناميد (صيدلة) Pyrimethamine مضادات الطفيليات اعتبارات علاجية اسم تجاري Fansidar, Fanlar, others ASHPDrugs.com الوضع القانوني إدارة الغذاء والدواء:وصلة فئة السلامة أثناء الحمل C (أستراليا) C (الولايات المتحدة) طرق إعطاء الدواء by mouth معرّفات ك ع ت P01P01BD51 BD51

 

Biografi ini tidak memiliki sumber tepercaya sehingga isinya tidak dapat dipastikan. Bantu memperbaiki artikel ini dengan menambahkan sumber tepercaya. Materi kontroversial atau trivial yang sumbernya tidak memadai atau tidak bisa dipercaya harus segera dihapus.Cari sumber: Faiz Novascotia Saripudin – berita · surat kabar · buku · cendekiawan · JSTOR (Pelajari cara dan kapan saatnya untuk menghapus pesan templat ini) Faiz Novascotia SaripudinLahirFaiz ...

Долли Партон Вэйлон Дженнингс Список кантри-альбомов №1 в США в 1978 году (Top Country Albums 1978) — это список кантри-альбомов, которые занимали первые места в США в 1978 году по итогам еженедельных хит-парадов журнала Billboard[1][2]. Содержание 1 Список 2 См. также 3 Примечания 4 Ссыл�...

 

Ongoing crime in Japan A Japanese Police car Crime in Japan has been recorded since at least the 1800s, and has varied over time.[1] History Main article: Criminal justice system of Japan Before the Meiji Era, crime was handled often severely at a daimyo level. Yakuza Main article: Yakuza The yakuza existed in Japan well before the 1800s and followed codes similar to the samurai. Their early operations were usually close-knit, and the leader and his subordinates had father-son relatio...

 

Diplomatic mission of The Kyrgyz Republic to the United States and Canada Embassy of the Kyrgyz Republic in the USA and Canada, Washington, D.C.LocationWashington, D.C.Address2360 Massachusetts Avenue, N.W.Coordinates38°54′47″N 77°3′8.7″W / 38.91306°N 77.052417°W / 38.91306; -77.052417AmbassadorBakyt Amanbaev [1] The Embassy of Kyrgyzstan in Washington, D.C. is the diplomatic mission of The Kyrgyz Republic to the United States and to Canada. It is l...

This article's lead section contains information that is not included elsewhere in the article. Please help improve the lead. (August 2023) (Learn how and when to remove this template message) Sports in San Diego include two men's and one women's major professional sports teams, several teams from other highest-level professional leagues, minor league teams, semi-pro and club teams, and college athletics. The most popular team in San Diego is the San Diego Padres of Major League Baseball (MLB...

 

United States historic placeCloister InnU.S. Historic districtContributing property Show map of Mercer County, New JerseyShow map of New JerseyShow map of the United StatesLocation65 Prospect Ave, Princeton, New JerseyCoordinates40°20′55.0″N 74°39′02.0″W / 40.348611°N 74.650556°W / 40.348611; -74.650556Built1924ArchitectAlbert RelsenArchitectural styleCollegiate GothicPart ofPrinceton Historic District (ID75001143[1])Added to NRHP27 June 1975 F...

 

The X FactorPembuatSimon CowellPresenterSteve Jones Khloé Kardashian Mario LopezJuriSimon Cowell Demi LovatoKelly RowlandPaulina RubioL.A. ReidBritney SpearsCheryl ColePaula AbdulNicole ScherzingerNegara asalAmerika SerikatJmlh. musim3Jmlh. episode80ProduksiProduser eksekutifSimon CowellCecile Frot-CoutazSiobhan GreeneRichard HollowayAndrew LlinaresRob WadeDurasi60-150 menitRilisJaringan asliFOXFormat gambar720p (HDTV)480i (NTSC)Rilis asli21 September 2011 –19 Desember 2013Pranala lua...

Singing voice synthesizer software developed by Crypton Future Media This article is about the character. For the video game series which features Hatsune Miku, see Hatsune Miku: Project DIVA. For other uses, see Hatsune Miku (disambiguation). In this Japanese name, the surname is Hatsune. Hatsune MikuDeveloper(s)Crypton Future MediaInitial releaseAugust 31, 2007Stable releaseHatsune Miku NT (New Type) / November 27, 2020 Operating systemMicrosoft Windows, macOSPlatformPCAvailable inJapaneseE...

 

Street in Sydney, Australia Macquarie StreetNew South WalesCentral section of Macquarie Street, looking south (2011)Northern endSouthern endCoordinates 33°51′32″S 151°12′49″E / 33.858794°S 151.213586°E / -33.858794; 151.213586 (Northern end) 33°52′11″S 151°12′43″E / 33.869782°S 151.211975°E / -33.869782; 151.211975 (Southern end) General informationTypeStreetLength1.2 km (0.7 mi)Major junctionsNorthern e...

 

United States historic placeFallen Timbers BattlefieldU.S. National Register of Historic PlacesU.S. National Historic SiteU.S. National Historic Landmark A statue commemorating the battleShow map of OhioShow map of the United StatesLocationMaumee, OhioCoordinates41°32′39″N 83°41′51″W / 41.54417°N 83.69750°W / 41.54417; -83.69750Area9 acres (3.6 ha) (landmarked area)Built1794WebsiteFallen Timbers Battlefield and Fort Miamis National Historic SiteNRHP...

Event venue in Madrid, Spain Teatro Circo Price in Madrid Price Circus Madrid. 2007. Architect Mariano Bayón. The Circo Price, also known as El Price, is a 2,142-seat concert venue and former circus in Madrid. The circus was originally located in the Jardin de las Delicias, a park which lay at the corner of the Paseo de Recoletos and the calle de la Veterinaria, now calle Barbara de Braganza.[1] In 1880 the impresario Thomas Price, part of the English family of equilibrist clowns, th...

 

Welsh actor and singer Aneirin HughesHughes in 2013BornAneurin Hughes (1958-05-08) 8 May 1958 (age 65)Aberystwyth, WalesAlma materRoyal Conservatoire of ScotlandOccupation(s)Actor, singerYears active1994–present Aneirin Hughes (born Aneurin Hughes, 8 May 1958) is a Welsh actor and singer known for playing Chief Superintendent Brian Prosser in the BBC4 Welsh police drama Hinterland. He won a Best Actor BAFTA Cymru (or BAFTA Wales) for his appearance as Delme in Cameleon (1997)...

 

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Armed Police Batrider – news · newspapers · books · scholar · JSTOR (November 2020) (Learn how and when to remove this template message) 1998 video gameArmed Police BatriderFlyer for Armed Police BatriderDeveloper(s)RaizingPublisher(s)EightingProgrammer(s)Shino...

Musang palem afrika Nandinia binotata Status konservasiRisiko rendahIUCN41589 TaksonomiKerajaanAnimaliaFilumChordataKelasMammaliaOrdoCarnivoraFamiliNandiniidaeGenusNandiniaSpesiesNandinia binotata (Gray, 1830) Tata namaSinonim takson Viverra binotata Gray 1830 ProtonimParadoxurus binotatus Distribusi lbs Musang palem afrika (Nandinia binotata), juga dikenal sebagai musang palem bintik-bintik dua, adalah mamalia feliformia kecil yang tersebar di Afrika Sub-Sahara. Hewan ini dikategorikan sebag...

 

Series of professional children's opera troupes Pollard's Lilliputian Opera Company was series of professional children's troupes, first established in Launceston, Tasmania, in May 1880.[1] Established by James Joseph Pollard, over the next thirty years several members of the Pollard family operated troupes under the same or similar names, travelling through Australia and New Zealand and later the Orient and North America.[2][3] Juvenile performance troupes 1907 Cartoo...

 

1948 film by Jean Yarbrough The CreeperDirected byJean YarbroughWritten byMaurice Tombragel[1]Based onAn original story ideaby Don Martin[1]Produced byBernard Small[1]Starring Eduardo Ciannelli Onslow Stevens June Vincent Ralph Morgan CinematographyGeorge Robinson[1]Edited bySaul A. Goodkind[1]ProductioncompaniesReliance Pictures, Inc.[1]Distributed byTwentieth Century-Fox Film Corp.Release date September 1948 (1948-09) Running time64 ...

French actress and film director Jeanne HerryHerry in 2014Born (1978-04-19) 19 April 1978 (age 45)FranceOccupation(s)Film director, actress, screenwriterYears active1990–presentChildren2 Jeanne Herry (born 19 April 1978) is a French filmmaker and actress. Personal life She is the daughter of actress Miou-Miou and singer-songwriter Julien Clerc.[1] Filmography Year Title Role Notes 1990 May Fools Actress 1995 Une femme dans la tourmente TV movie 2002 Maigret TV series (...

 

Award of the House of Romanov This article is about the Russian order established in 1929. For other uses, see Order of Saint Nicholas Thaumaturgus (disambiguation). This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Order of Saint Nicholas the Wonderworker – news · newspapers · books · scholar · JSTOR (October...

 

Strategi Solo vs Squad di Free Fire: Cara Menang Mudah!