You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iceberg.apache.org by gi...@apache.org on 2026/03/17 03:49:59 UTC

(iceberg-rust) branch gh-pages updated: deploy: ffd6454fe283e0815593d2fb93169ea36b690174

This is an automated email from the ASF dual-hosted git repository.

github-bot pushed a commit to branch gh-pages
in repository https://gitbox.apache.org/repos/asf/iceberg-rust.git


The following commit(s) were added to refs/heads/gh-pages by this push:
     new 72bb607ff deploy: ffd6454fe283e0815593d2fb93169ea36b690174
72bb607ff is described below

commit 72bb607ff35cb35febad7b1e5efb2625796df68a
Author: blackmwk <bl...@users.noreply.github.com>
AuthorDate: Tue Mar 17 03:49:53 2026 +0000

    deploy: ffd6454fe283e0815593d2fb93169ea36b690174
---
 api/iceberg_catalog_glue/struct.GlueCatalog.html   |   90 +-
 .../struct.GlueCatalogBuilder.html                 |    4 +-
 api/iceberg_storage_opendal/all.html               |    2 +-
 .../enum.OpenDalStorage.html                       |   26 +-
 .../enum.OpenDalStorageFactory.html                |    8 +-
 api/iceberg_storage_opendal/index.html             |    5 +-
 .../resolving/struct.OpenDalResolvingStorage.html  |   11 +
 .../struct.OpenDalResolvingStorageFactory.html     |   11 +
 api/iceberg_storage_opendal/sidebar-items.js       |    2 +-
 ...ge.html => struct.OpenDalResolvingStorage.html} |   72 +-
 ... => struct.OpenDalResolvingStorageFactory.html} |   48 +-
 api/search.index/00252847c56a.js                   |    1 -
 api/search.index/00467055ccd8.js                   |    1 +
 api/search.index/008e2e090c0b.js                   |    1 +
 api/search.index/00b00c1a074a.js                   |    1 +
 api/search.index/00ec0b06ead1.js                   |    1 -
 api/search.index/01a9a8c83dd8.js                   |    1 -
 api/search.index/01e6f6a3b913.js                   |    1 -
 api/search.index/0285794e6292.js                   |    1 -
 api/search.index/02870b5bdf16.js                   |    1 +
 api/search.index/02a3411a04f0.js                   |    1 -
 api/search.index/02afc21d9d3d.js                   |    1 +
 api/search.index/02b73713dd8c.js                   |    1 -
 api/search.index/04031a2b3215.js                   |    1 +
 api/search.index/0404fbf5b9bb.js                   |    1 -
 api/search.index/048b6ba21c37.js                   |    1 -
 api/search.index/04d23049f1cd.js                   |    1 +
 api/search.index/04e830e0e3e4.js                   |    1 +
 api/search.index/05346cd1e671.js                   |    1 +
 api/search.index/055735b0bf46.js                   |    1 -
 api/search.index/05bc084d52c9.js                   |    1 +
 api/search.index/05d3c9c28bd8.js                   |    1 -
 api/search.index/06f47ba65d1a.js                   |    1 -
 api/search.index/06f48c230cfd.js                   |    1 -
 api/search.index/072b39a56e19.js                   |    1 -
 api/search.index/0755f0558464.js                   |    1 -
 api/search.index/075dfcafaed8.js                   |    1 +
 api/search.index/078409530252.js                   |    1 -
 api/search.index/07c58e251287.js                   |    1 +
 api/search.index/07d5515d9e7a.js                   |    1 +
 api/search.index/0837661bec4f.js                   |    1 +
 api/search.index/084bed2462a9.js                   |    1 +
 api/search.index/08a3beda5170.js                   |    1 -
 api/search.index/08d3491423ee.js                   |    1 +
 api/search.index/092663e33a37.js                   |    1 +
 api/search.index/09a2d13296a1.js                   |    1 -
 api/search.index/0a45a1ecc55d.js                   |    1 +
 api/search.index/0ab4dfbacfff.js                   |    1 -
 api/search.index/0abf8ac1e2ad.js                   |    1 -
 api/search.index/0b032fbc76d4.js                   |    1 -
 api/search.index/0ba0054f8ec8.js                   |    1 +
 api/search.index/0bf4f2000a6e.js                   |    1 +
 api/search.index/0bfa4569e0de.js                   |    1 +
 api/search.index/0c4cf030cf5b.js                   |    1 +
 api/search.index/0c5d33974521.js                   |    1 +
 api/search.index/0c6402c6f75b.js                   |    1 -
 api/search.index/0c79e57acae3.js                   |    1 -
 api/search.index/0c9ef78c117f.js                   |    1 +
 api/search.index/0caef73265d9.js                   |    1 -
 api/search.index/0cbafb5a1d11.js                   |    1 +
 api/search.index/0d150af95a58.js                   |    1 -
 api/search.index/0dc42a024851.js                   |    1 +
 api/search.index/0df01de88cc2.js                   |    1 +
 api/search.index/0ed024228ffc.js                   |    1 -
 api/search.index/0f26cb0911a8.js                   |    1 +
 api/search.index/0fca9f26b6f3.js                   |    1 +
 api/search.index/101cbb6bc4a0.js                   |    1 -
 api/search.index/10570474cb35.js                   |    1 +
 api/search.index/105d96156234.js                   |    1 -
 api/search.index/108d85c44aa2.js                   |    1 -
 api/search.index/10934e490a18.js                   |    1 +
 api/search.index/10b4214267ad.js                   |    1 +
 api/search.index/1116fdf0ca4c.js                   |    1 -
 api/search.index/113c7894d3b9.js                   |    1 -
 api/search.index/1195b6467bae.js                   |    1 -
 api/search.index/11b9b683186c.js                   |    1 +
 api/search.index/11dc1591ed92.js                   |    1 -
 api/search.index/11ebbbe58b7d.js                   |    1 -
 api/search.index/1218916cc34f.js                   |    1 +
 api/search.index/1230d89075f0.js                   |    1 -
 api/search.index/1273c961f89e.js                   |    1 -
 api/search.index/12a516ba5383.js                   |    1 +
 api/search.index/134f756c5510.js                   |    1 +
 api/search.index/13c54ca42061.js                   |    1 +
 api/search.index/145e29a1b739.js                   |    1 +
 api/search.index/14a4b0e0a7a7.js                   |    1 -
 api/search.index/14a6ad38caf0.js                   |    1 -
 api/search.index/14bc8c3658c3.js                   |    1 +
 api/search.index/15cd646f0157.js                   |    1 +
 api/search.index/15e539413daa.js                   |    1 -
 api/search.index/165936476211.js                   |    1 +
 api/search.index/16e00d5f8b66.js                   |    1 +
 api/search.index/170e97b776f5.js                   |    1 +
 api/search.index/171c388e81b3.js                   |    1 -
 api/search.index/1727a3ea489f.js                   |    1 -
 api/search.index/186b97047176.js                   |    1 +
 api/search.index/18df185acbde.js                   |    1 -
 api/search.index/19554a51f113.js                   |    1 +
 api/search.index/1987a447d815.js                   |    1 +
 api/search.index/19c436706e4e.js                   |    1 -
 api/search.index/19cf20d37b1b.js                   |    1 +
 api/search.index/1ab916b633b2.js                   |    1 +
 api/search.index/1b240f6c919c.js                   |    1 +
 api/search.index/1b35729b0be3.js                   |    1 -
 api/search.index/1b3f616e85f6.js                   |    1 -
 api/search.index/1b7f56d4368e.js                   |    1 -
 api/search.index/1bc32022e9cb.js                   |    1 +
 api/search.index/1bc832d6bb6d.js                   |    1 +
 api/search.index/1c006a4d5f71.js                   |    1 +
 api/search.index/1c28969e9485.js                   |    1 +
 api/search.index/1c3d8c4c061c.js                   |    1 +
 api/search.index/1c4745fa3ba5.js                   |    1 +
 api/search.index/1c7681ecd925.js                   |    1 -
 api/search.index/1caa5c891fb0.js                   |    1 -
 api/search.index/1cdf5ec242f8.js                   |    1 -
 api/search.index/1cf7a8cb3ae4.js                   |    1 +
 api/search.index/1cf81c82b4a2.js                   |    1 -
 api/search.index/1d09161d08e0.js                   |    1 -
 api/search.index/1d265b347160.js                   |    1 +
 api/search.index/1d2958823030.js                   |    1 -
 api/search.index/1d40c9bac7ac.js                   |    1 +
 api/search.index/1d55c3580a7b.js                   |    1 +
 api/search.index/1d7cdb85d1af.js                   |    1 +
 api/search.index/1dfcde2862b2.js                   |    1 +
 api/search.index/1e3e3e2f9fa2.js                   |    1 -
 api/search.index/1e52371fd34d.js                   |    1 +
 api/search.index/1e8c048a8a01.js                   |    1 +
 api/search.index/1ebb2ece7b80.js                   |    1 +
 api/search.index/1f046cc28ca9.js                   |    1 +
 api/search.index/1f13d7f9aa71.js                   |    1 -
 api/search.index/1f31f1f90fe2.js                   |    1 -
 api/search.index/1fa84e3de79b.js                   |    1 -
 api/search.index/1feda528b5b6.js                   |    1 +
 api/search.index/2005beed2159.js                   |    1 -
 api/search.index/201c64ae16c3.js                   |    1 -
 api/search.index/202b7dbf02f1.js                   |    1 +
 api/search.index/203880d2543a.js                   |    1 -
 api/search.index/20e3576b09c1.js                   |    1 -
 api/search.index/20f57a4a7843.js                   |    1 -
 api/search.index/2126b567f83c.js                   |    1 -
 api/search.index/2157fc47ee42.js                   |    1 -
 api/search.index/21714fa4ac41.js                   |    1 +
 api/search.index/221935f949ac.js                   |    1 +
 api/search.index/222cbd1328d7.js                   |    1 -
 api/search.index/2372e6fabb83.js                   |    1 +
 api/search.index/239df144e9dd.js                   |    1 +
 api/search.index/23c0acb336c5.js                   |    1 +
 api/search.index/23d7993031c8.js                   |    1 +
 api/search.index/240bee8a2bf2.js                   |    1 +
 api/search.index/24545607206e.js                   |    1 +
 api/search.index/245a73273ba5.js                   |    1 -
 api/search.index/24665ffe1ef6.js                   |    1 -
 api/search.index/24905808941d.js                   |    1 +
 api/search.index/252df5eb4395.js                   |    1 -
 api/search.index/2544a6ea9394.js                   |    1 -
 api/search.index/2645dc3d039e.js                   |    1 +
 api/search.index/267964869f5d.js                   |    1 +
 api/search.index/26a2d3f036f4.js                   |    1 -
 api/search.index/26c9f6ea763e.js                   |    1 +
 api/search.index/26d2afeff2d8.js                   |    1 -
 api/search.index/2734efbcc0e4.js                   |    1 -
 api/search.index/2754cebf7b8a.js                   |    1 -
 api/search.index/27642e8a4c21.js                   |    1 -
 api/search.index/2829eca3c380.js                   |    1 +
 api/search.index/2840a666476e.js                   |    1 -
 api/search.index/284af2678775.js                   |    1 -
 api/search.index/288c6596783c.js                   |    1 +
 api/search.index/28de2d445bd4.js                   |    1 -
 api/search.index/28fddb2dc7bb.js                   |    1 +
 api/search.index/290d29134174.js                   |    1 -
 api/search.index/291b925bfb6f.js                   |    1 -
 api/search.index/296396bd34db.js                   |    1 -
 api/search.index/29642555d079.js                   |    1 -
 api/search.index/298b2ab0020d.js                   |    1 +
 api/search.index/29ccdb250625.js                   |    1 -
 api/search.index/2a1e3fb6cc36.js                   |    1 -
 api/search.index/2a57022f00d1.js                   |    1 +
 api/search.index/2a86844f24d8.js                   |    1 +
 api/search.index/2a8e614f3577.js                   |    1 +
 api/search.index/2ab8661f6df3.js                   |    1 +
 api/search.index/2adae993af78.js                   |    1 +
 api/search.index/2afce714a563.js                   |    1 -
 api/search.index/2b3424b6cbce.js                   |    1 +
 api/search.index/2b3a40889382.js                   |    1 -
 api/search.index/2b72cc7fda85.js                   |    1 -
 api/search.index/2b7c3c2fef0d.js                   |    1 -
 api/search.index/2bbc0cf60842.js                   |    1 -
 api/search.index/2c059817d0b9.js                   |    1 +
 api/search.index/2c0f586bd94b.js                   |    1 +
 api/search.index/2c9425063f00.js                   |    1 -
 api/search.index/2cae0bf8abcd.js                   |    1 -
 api/search.index/2ce08239ed6d.js                   |    1 -
 api/search.index/2d00a54c39b0.js                   |    1 -
 api/search.index/2d540368095b.js                   |    1 +
 api/search.index/2d7416ac2e92.js                   |    1 +
 api/search.index/2d879760965a.js                   |    1 -
 api/search.index/2dac8164afe8.js                   |    1 +
 api/search.index/2e0498769960.js                   |    1 +
 api/search.index/2e10435c5529.js                   |    1 +
 api/search.index/2e18cfe45856.js                   |    1 -
 api/search.index/2e367b191e8a.js                   |    1 -
 api/search.index/2ec7aa7e61b8.js                   |    1 +
 api/search.index/2ee78d02b66b.js                   |    1 +
 api/search.index/2f58f1db4a09.js                   |    1 -
 api/search.index/2faccccb2ae1.js                   |    1 -
 api/search.index/2ff1a01c4c0e.js                   |    1 -
 api/search.index/2ffa1690a96d.js                   |    1 +
 api/search.index/30e914e63a15.js                   |    1 +
 api/search.index/30ee7966b4ca.js                   |    1 +
 api/search.index/31e87706729d.js                   |    1 +
 api/search.index/3248f1ef41d3.js                   |    1 -
 api/search.index/3255fd4c2a93.js                   |    1 -
 api/search.index/326c0c129e40.js                   |    1 +
 api/search.index/328ca00cb618.js                   |    1 +
 api/search.index/3299d2c1fd12.js                   |    1 +
 api/search.index/32f4ee4a7d8c.js                   |    1 -
 api/search.index/32f60632984e.js                   |    1 -
 api/search.index/335024037b64.js                   |    1 -
 api/search.index/336a977cc95e.js                   |    1 +
 api/search.index/336dfe15f66a.js                   |    1 -
 api/search.index/33722427de9f.js                   |    1 +
 api/search.index/33ca81f487eb.js                   |    1 -
 api/search.index/33d83cd7851f.js                   |    1 -
 api/search.index/340909233085.js                   |    1 -
 api/search.index/34750d80bb67.js                   |    1 +
 api/search.index/3498d8350a32.js                   |    1 -
 api/search.index/349d7916669b.js                   |    1 +
 api/search.index/349e483005bc.js                   |    1 +
 api/search.index/356e5bc2bd0b.js                   |    1 -
 api/search.index/36329a491bb1.js                   |    1 +
 api/search.index/363da7995c6a.js                   |    1 -
 api/search.index/368333e4b28d.js                   |    1 +
 api/search.index/368d6909936c.js                   |    1 -
 api/search.index/3710969a8f47.js                   |    1 +
 api/search.index/380e6bb8ab2e.js                   |    1 -
 api/search.index/381e1faa5e2f.js                   |    1 +
 api/search.index/38344436999b.js                   |    1 +
 api/search.index/38620432296c.js                   |    1 -
 api/search.index/3897fc274efe.js                   |    1 +
 api/search.index/38d0f1cafc69.js                   |    1 -
 api/search.index/38ee021f0c9c.js                   |    1 -
 api/search.index/38f73828ff4c.js                   |    1 +
 api/search.index/3949563bf157.js                   |    1 -
 api/search.index/395311d24744.js                   |    1 +
 api/search.index/398542bd65f2.js                   |    1 +
 api/search.index/39b57cb0f44e.js                   |    1 +
 api/search.index/39c86a74f1fe.js                   |    1 -
 api/search.index/3a398f5722ef.js                   |    1 +
 api/search.index/3a3aa60fa500.js                   |    1 +
 api/search.index/3a7c86236934.js                   |    1 -
 api/search.index/3aaa8c0a8280.js                   |    1 +
 api/search.index/3af2013f494f.js                   |    1 +
 api/search.index/3b0ce88c5b6a.js                   |    1 +
 api/search.index/3b18c1948bc0.js                   |    1 -
 api/search.index/3b71634e64de.js                   |    1 -
 api/search.index/3bb58a3e2383.js                   |    1 -
 api/search.index/3be2e72f0a5b.js                   |    1 -
 api/search.index/3c19439b040e.js                   |    1 -
 api/search.index/3c1fca2f13df.js                   |    1 -
 api/search.index/3dd0b248809b.js                   |    1 +
 api/search.index/3ddb6ff2603e.js                   |    1 -
 api/search.index/3ddd633a2d62.js                   |    1 -
 api/search.index/3e06e049610e.js                   |    1 +
 api/search.index/3e64d7015431.js                   |    1 +
 api/search.index/3e7428b2c7dc.js                   |    1 -
 api/search.index/3edc2bdea936.js                   |    1 -
 api/search.index/3ee9c01077e7.js                   |    1 +
 api/search.index/3f2727ff2c1b.js                   |    1 -
 api/search.index/3f36792a6df1.js                   |    1 +
 api/search.index/3f74b9526eea.js                   |    1 +
 api/search.index/3fb5bfe1dfff.js                   |    1 -
 api/search.index/4062f6b10511.js                   |    1 -
 api/search.index/4076ba8915ee.js                   |    1 -
 api/search.index/40d8c61c2a3f.js                   |    1 +
 api/search.index/4105596be839.js                   |    1 -
 api/search.index/41173b0a157d.js                   |    1 -
 api/search.index/413a0bc4e037.js                   |    1 -
 api/search.index/41526bb61181.js                   |    1 -
 api/search.index/41ed4fab1988.js                   |    1 -
 api/search.index/42666d6511c6.js                   |    1 -
 api/search.index/4281326133d5.js                   |    1 -
 api/search.index/42cff9f1a22b.js                   |    1 -
 api/search.index/42d2b1d03523.js                   |    1 +
 api/search.index/433fe00b78e6.js                   |    1 +
 api/search.index/43475aa770ad.js                   |    1 +
 api/search.index/4350b260c5f0.js                   |    1 +
 api/search.index/439c4a08d6c5.js                   |    1 +
 api/search.index/4411b10736bc.js                   |    1 -
 api/search.index/449e76baba9f.js                   |    1 -
 api/search.index/44d78615f7b1.js                   |    1 +
 api/search.index/44f52534916b.js                   |    1 -
 api/search.index/45461e7e5c26.js                   |    1 +
 api/search.index/45a01bcecf86.js                   |    1 -
 api/search.index/45c1a30dc8cc.js                   |    1 -
 api/search.index/45f42d56d83c.js                   |    1 -
 api/search.index/45f56692ff3a.js                   |    1 +
 api/search.index/4625e45fc841.js                   |    1 +
 api/search.index/465a83e13d4c.js                   |    1 -
 api/search.index/4672a7255857.js                   |    1 +
 api/search.index/469410d9c43b.js                   |    1 +
 api/search.index/46c45f7509f4.js                   |    1 +
 api/search.index/46c99dfcf193.js                   |    1 -
 api/search.index/46ffa069d974.js                   |    1 -
 api/search.index/471e02ebc256.js                   |    1 -
 api/search.index/4737f22ecaf7.js                   |    1 +
 api/search.index/4746dc247e21.js                   |    1 -
 api/search.index/4761431e594b.js                   |    1 +
 api/search.index/47d7ee32f3ad.js                   |    1 +
 api/search.index/48ecc047f2cc.js                   |    1 -
 api/search.index/491198b3a83c.js                   |    1 +
 api/search.index/4958f660193b.js                   |    1 -
 api/search.index/49bafd034aff.js                   |    1 -
 api/search.index/49e95ce063d2.js                   |    1 +
 api/search.index/49f46d5bc3f6.js                   |    1 -
 api/search.index/4aec8ff8b084.js                   |    1 -
 api/search.index/4b44ed188494.js                   |    1 +
 api/search.index/4b45e7738ddf.js                   |    1 +
 api/search.index/4b83412ec320.js                   |    1 +
 api/search.index/4b9bad53a537.js                   |    1 -
 api/search.index/4ba1878d4000.js                   |    1 -
 api/search.index/4bb45260d0f2.js                   |    1 +
 api/search.index/4c13daa71b4e.js                   |    1 +
 api/search.index/4c4625835f32.js                   |    1 +
 api/search.index/4c95d525415e.js                   |    1 +
 api/search.index/4cac4c803e6a.js                   |    1 -
 api/search.index/4cc177f4309f.js                   |    1 +
 api/search.index/4cd717d53cc6.js                   |    1 -
 api/search.index/4d09bcf1cfd9.js                   |    1 -
 api/search.index/4d4421f7ccae.js                   |    1 -
 api/search.index/4d699e2f05e1.js                   |    1 +
 api/search.index/4d7bec211bf4.js                   |    1 -
 api/search.index/4d895f146a35.js                   |    1 +
 api/search.index/4dedcfd21572.js                   |    1 -
 api/search.index/4e4930879c6d.js                   |    1 -
 api/search.index/4e7b7ae00ce5.js                   |    1 +
 api/search.index/4ecdbce8604b.js                   |    1 +
 api/search.index/4ed6b30df942.js                   |    1 -
 api/search.index/4f12e3bb1a67.js                   |    1 -
 api/search.index/4f5192d50e3b.js                   |    1 +
 api/search.index/4f63c68b5c11.js                   |    1 +
 api/search.index/4f708cea13a0.js                   |    1 +
 api/search.index/4f85ace45ab5.js                   |    1 +
 api/search.index/4fad28174ef1.js                   |    1 -
 api/search.index/4fb85a7db754.js                   |    1 +
 api/search.index/504137253593.js                   |    1 -
 api/search.index/504a0f56e710.js                   |    1 +
 api/search.index/50e200c5a3c7.js                   |    1 +
 api/search.index/5116d5bcb27d.js                   |    1 -
 api/search.index/511c2a295ca9.js                   |    1 +
 api/search.index/51b8e5ca24e7.js                   |    1 -
 api/search.index/51c916957e08.js                   |    1 -
 api/search.index/51d87a33d066.js                   |    1 +
 api/search.index/5204fa79ccca.js                   |    1 +
 .../{3e8424e22257.js => 524531fcd808.js}           |    2 +-
 api/search.index/52665d1e8641.js                   |    1 -
 api/search.index/52a0ab221d51.js                   |    1 +
 api/search.index/530ac0888d0e.js                   |    1 -
 api/search.index/533634dc4f6b.js                   |    1 +
 api/search.index/5388d4efacbe.js                   |    1 -
 api/search.index/53afdf78593b.js                   |    1 -
 api/search.index/53cff2f27c33.js                   |    1 +
 api/search.index/53ff9a72e360.js                   |    1 -
 api/search.index/541bf6f5bf69.js                   |    1 -
 api/search.index/54a933e94002.js                   |    1 +
 api/search.index/54f6b0293541.js                   |    1 +
 api/search.index/54ff29f11791.js                   |    1 +
 api/search.index/5542a9b3426a.js                   |    1 -
 api/search.index/556b0790fb10.js                   |    1 +
 api/search.index/5573c95db5b5.js                   |    1 -
 api/search.index/557db927971e.js                   |    1 -
 api/search.index/55e1068ff698.js                   |    1 -
 api/search.index/55f684b1c347.js                   |    1 +
 api/search.index/561714c967b5.js                   |    1 -
 api/search.index/5633d8a86493.js                   |    1 -
 api/search.index/565aeb77ad82.js                   |    1 -
 api/search.index/56659bf26095.js                   |    1 -
 api/search.index/56f179ae706e.js                   |    1 -
 api/search.index/570767d40c61.js                   |    1 +
 api/search.index/577df1a49db1.js                   |    1 +
 api/search.index/57876303dd27.js                   |    1 -
 api/search.index/57ec07df249f.js                   |    1 +
 api/search.index/58b201c48aa9.js                   |    1 -
 api/search.index/58cddc7feb42.js                   |    1 +
 api/search.index/58f8caa2580c.js                   |    1 -
 api/search.index/591fb3423456.js                   |    1 -
 api/search.index/59405b7bff5e.js                   |    1 +
 api/search.index/59cdb689fd5c.js                   |    1 +
 api/search.index/59e09152a923.js                   |    1 +
 api/search.index/5a2c889b30b0.js                   |    1 -
 api/search.index/5a487b4ba270.js                   |    1 +
 api/search.index/5a5af73f3fc1.js                   |    1 +
 api/search.index/5a76a7be1ac7.js                   |    1 +
 api/search.index/5aa0f9a302cb.js                   |    1 +
 api/search.index/5aadba7ecd24.js                   |    1 +
 api/search.index/5b01c5a8b93d.js                   |    1 +
 api/search.index/5ba39e7d6a6b.js                   |    1 +
 api/search.index/5bce554b15a5.js                   |    1 +
 api/search.index/5befc964cb41.js                   |    1 -
 api/search.index/5bff864c7d0b.js                   |    1 +
 api/search.index/5c218a71302d.js                   |    1 +
 api/search.index/5c41590a461b.js                   |    1 +
 api/search.index/5c689458805a.js                   |    1 +
 api/search.index/5cd4ab726018.js                   |    1 -
 api/search.index/5d25e2a9423a.js                   |    1 +
 api/search.index/5d7298470ead.js                   |    1 +
 api/search.index/5da7cadb7762.js                   |    1 +
 api/search.index/5dc2c1f348f1.js                   |    1 -
 api/search.index/5e07ded9448a.js                   |    1 +
 api/search.index/5e736abf9aab.js                   |    1 -
 api/search.index/5ec448d285df.js                   |    1 -
 api/search.index/5f0a1d3d62a1.js                   |    1 +
 api/search.index/5f78e1014b53.js                   |    1 -
 api/search.index/5f7db3db1a92.js                   |    1 +
 api/search.index/5f8c8594b771.js                   |    1 +
 api/search.index/602310fc8d3c.js                   |    1 +
 api/search.index/6063271b6604.js                   |    1 +
 api/search.index/6077cea5cde7.js                   |    1 -
 api/search.index/60e47135379e.js                   |    1 -
 api/search.index/61dab3f77ebc.js                   |    1 +
 api/search.index/61e6bc1f412e.js                   |    1 -
 api/search.index/620927b3c27d.js                   |    1 +
 api/search.index/6226c6ed1211.js                   |    1 -
 api/search.index/623a4bd7b434.js                   |    1 -
 api/search.index/624ef353b0e2.js                   |    1 -
 api/search.index/62db364022b8.js                   |    1 -
 api/search.index/62f3cb04b651.js                   |    1 -
 api/search.index/6303061a40a9.js                   |    1 +
 api/search.index/6311babd195d.js                   |    1 -
 api/search.index/6321c0d15fcd.js                   |    1 -
 api/search.index/63433050a8a9.js                   |    1 -
 api/search.index/63b761160711.js                   |    1 +
 api/search.index/63be059bdab2.js                   |    1 +
 api/search.index/63c9a88dae3c.js                   |    1 +
 api/search.index/63d0ed3f3447.js                   |    1 -
 api/search.index/640b5885e6b9.js                   |    1 +
 api/search.index/6492e05a37ef.js                   |    1 -
 api/search.index/649cc9d2f06a.js                   |    1 -
 api/search.index/64c2ad619c6a.js                   |    1 +
 api/search.index/64c6f89ae541.js                   |    1 -
 api/search.index/6513f868ef5c.js                   |    1 -
 api/search.index/65616b5a1e73.js                   |    1 -
 api/search.index/659c2345da66.js                   |    1 +
 api/search.index/65ac463e5577.js                   |    1 -
 api/search.index/65f281c187c3.js                   |    1 -
 api/search.index/6629c438367a.js                   |    1 -
 api/search.index/66829fceeb1d.js                   |    1 +
 api/search.index/66b44ce5813b.js                   |    1 -
 api/search.index/66cb1f9c1633.js                   |    1 -
 api/search.index/67279099c258.js                   |    1 -
 api/search.index/675afd52bcb0.js                   |    1 +
 api/search.index/676d92b10ba9.js                   |    1 +
 api/search.index/67f3d7b37484.js                   |    1 +
 api/search.index/68874c1bcf58.js                   |    1 -
 api/search.index/68f69022418e.js                   |    1 +
 api/search.index/6935085caaf6.js                   |    1 -
 api/search.index/69367ceba54e.js                   |    1 -
 api/search.index/6940fe1b0fe0.js                   |    1 -
 api/search.index/696d69b9c241.js                   |    1 +
 api/search.index/6986cf071586.js                   |    1 +
 api/search.index/6a45f9eb3342.js                   |    1 -
 api/search.index/6a61a843fa86.js                   |    1 -
 api/search.index/6abde7f23c3b.js                   |    1 -
 api/search.index/6b5c325ae0f9.js                   |    1 +
 api/search.index/6bd327ddb5ac.js                   |    1 +
 api/search.index/6bedc467937e.js                   |    1 +
 api/search.index/6c815dd69d03.js                   |    1 -
 api/search.index/6c9d993e1705.js                   |    1 +
 api/search.index/6ca6c7c1afe9.js                   |    1 +
 api/search.index/6cd04fe3cf84.js                   |    1 -
 api/search.index/6d08f8e53ca9.js                   |    1 +
 api/search.index/6d6ddac806b1.js                   |    1 -
 api/search.index/6f0da4bd2aef.js                   |    1 -
 api/search.index/6f607a0b3e48.js                   |    1 -
 api/search.index/6f8eb60fcb1f.js                   |    1 +
 api/search.index/6fa94fb13a3e.js                   |    1 -
 api/search.index/708d2263aeda.js                   |    1 -
 api/search.index/70ad1f4002a4.js                   |    1 +
 api/search.index/70b7f3861b70.js                   |    1 -
 api/search.index/718316c260b6.js                   |    1 -
 api/search.index/71a6c01fc658.js                   |    1 -
 api/search.index/71acc0afbf86.js                   |    1 +
 api/search.index/71bd537e24aa.js                   |    1 -
 api/search.index/71bf10440904.js                   |    1 -
 api/search.index/720a9ac60c88.js                   |    1 +
 api/search.index/7231b1948de5.js                   |    1 -
 api/search.index/72b99e6f87a1.js                   |    1 +
 api/search.index/72c7c7b6ccc5.js                   |    1 +
 api/search.index/72cceb956963.js                   |    1 -
 api/search.index/72df075704cf.js                   |    1 +
 api/search.index/7318553fe376.js                   |    1 +
 api/search.index/7340d756f0a1.js                   |    1 -
 api/search.index/735f25c1e3f5.js                   |    1 +
 api/search.index/736931c1be68.js                   |    1 -
 api/search.index/738a8b5ca49a.js                   |    1 +
 api/search.index/740113722ee0.js                   |    1 -
 api/search.index/740c26d25c3f.js                   |    1 -
 api/search.index/745a191457ad.js                   |    1 +
 api/search.index/7498255c4d3f.js                   |    1 +
 api/search.index/74e6901a7c54.js                   |    1 -
 api/search.index/7522b4de7d2c.js                   |    1 +
 api/search.index/752aa26bd604.js                   |    1 +
 api/search.index/75651ea3159e.js                   |    1 +
 api/search.index/75c1c764a00f.js                   |    1 +
 api/search.index/75f8379d37e7.js                   |    1 -
 api/search.index/762e7bbc3f3c.js                   |    1 +
 api/search.index/76700f5fd1f0.js                   |    1 -
 api/search.index/767f0b565275.js                   |    1 +
 api/search.index/774288ea54cd.js                   |    1 +
 api/search.index/78633cd11502.js                   |    1 -
 api/search.index/78b35ab6d3f3.js                   |    1 -
 api/search.index/78de1744e8eb.js                   |    1 -
 api/search.index/78dec25dd853.js                   |    1 +
 api/search.index/78fd625ae34d.js                   |    1 +
 api/search.index/799db173fc49.js                   |    1 -
 api/search.index/79e633cb0edc.js                   |    1 +
 api/search.index/7a2fd351f7e4.js                   |    1 +
 api/search.index/7a9f7c9e1bb1.js                   |    1 +
 api/search.index/7aaffda0d00b.js                   |    1 +
 api/search.index/7ad727d47a71.js                   |    1 -
 api/search.index/7b142a520c8e.js                   |    1 +
 api/search.index/7b2ec151046f.js                   |    1 +
 api/search.index/7b327a01fdb7.js                   |    1 -
 api/search.index/7b6c7e875342.js                   |    1 -
 api/search.index/7b983520648c.js                   |    1 +
 api/search.index/7bf6f4b2c347.js                   |    1 -
 api/search.index/7c0b0f336d43.js                   |    1 -
 api/search.index/7cc3fe9b3b4b.js                   |    1 -
 api/search.index/7cda9c576e53.js                   |    1 +
 api/search.index/7ceced79926c.js                   |    1 -
 api/search.index/7d4918a5ecfb.js                   |    1 -
 api/search.index/7d52282ac7bc.js                   |    1 -
 api/search.index/7e0f8b993960.js                   |    1 +
 api/search.index/7e352d8dfc5a.js                   |    1 -
 api/search.index/7e3bda17fa0b.js                   |    1 +
 api/search.index/7e970499226c.js                   |    1 +
 api/search.index/7eca2a550102.js                   |    1 +
 api/search.index/7fff1b7b3fa5.js                   |    1 +
 api/search.index/desc/31c62c505666.js              |    1 -
 api/search.index/desc/76d56a7ca3b2.js              |    1 +
 api/search.index/entry/32ddfbf9be05.js             |    1 -
 api/search.index/entry/6fbfe377c789.js             |    1 +
 api/search.index/function/61c816f00935.js          |    1 +
 api/search.index/function/ccce77cef075.js          |    1 -
 .../generic_inverted_index/52b9ae2cba1b.js         |    1 +
 .../generic_inverted_index/f5020a4a8656.js         |    1 -
 api/search.index/name/8bf398e8332d.js              |    1 +
 api/search.index/name/af60be0ce572.js              |    1 -
 api/search.index/normalizedName/08f11ce5252d.js    |    1 -
 api/search.index/normalizedName/9df63c1a6562.js    |    1 +
 api/search.index/path/4af3ea0f0ce0.js              |    1 -
 api/search.index/path/b3da35c1d2d7.js              |    1 +
 api/search.index/root.js                           |    2 +-
 api/search.index/type/213f838255d8.js              |    1 -
 api/search.index/type/f82f9adc554c.js              |    1 +
 api/src-files.js                                   |    4 +-
 api/src/iceberg_storage_opendal/lib.rs.html        | 1353 ++++++++++----------
 api/src/iceberg_storage_opendal/resolving.rs.html  |  320 +++++
 api/trait.impl/core/clone/trait.Clone.js           |    4 +-
 api/trait.impl/core/default/trait.Default.js       |    4 +-
 api/trait.impl/core/fmt/trait.Debug.js             |    4 +-
 api/trait.impl/core/marker/trait.Freeze.js         |    4 +-
 api/trait.impl/core/marker/trait.Send.js           |    4 +-
 api/trait.impl/core/marker/trait.Sync.js           |    4 +-
 api/trait.impl/core/marker/trait.Unpin.js          |    4 +-
 api/trait.impl/core/marker/trait.UnsafeUnpin.js    |    4 +-
 .../core/panic/unwind_safe/trait.RefUnwindSafe.js  |    4 +-
 .../core/panic/unwind_safe/trait.UnwindSafe.js     |    4 +-
 api/trait.impl/iceberg/catalog/trait.Catalog.js    |    4 +-
 .../iceberg/catalog/trait.CatalogBuilder.js        |    4 +-
 api/trait.impl/iceberg/io/storage/trait.Storage.js |    4 +-
 .../iceberg/io/storage/trait.StorageFactory.js     |    4 +-
 api/trait.impl/serde_core/de/trait.Deserialize.js  |    4 +-
 api/trait.impl/serde_core/ser/trait.Serialize.js   |    4 +-
 573 files changed, 1434 insertions(+), 1131 deletions(-)

diff --git a/api/iceberg_catalog_glue/struct.GlueCatalog.html b/api/iceberg_catalog_glue/struct.GlueCatalog.html
index 2a6789185..47dfa3af2 100644
--- a/api/iceberg_catalog_glue/struct.GlueCatalog.html
+++ b/api/iceberg_catalog_glue/struct.GlueCatalog.html
@@ -1,19 +1,19 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Glue Catalog"><title>GlueCatalog in iceberg_catalog_glue - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-MediumItalic- [...]
-</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-GlueCatalog" class="impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#164-280">Source</a><a href="#impl-GlueCatalog" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.GlueCatalog.html" title="s [...]
-</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Catalog-for-GlueCatalog" class="impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#283-902">Source</a><a href="#impl-Catalog-for-GlueCatalog" class="anchor">§</a><h3 class="code- [...]
+</div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-GlueCatalog" class="impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#164-280">Source</a><a href="#impl-GlueCatalog" class="anchor">§</a><h3 class="code-header">impl <a class="struct" href="struct.GlueCatalog.html" title="s [...]
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Catalog-for-GlueCatalog" class="impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#283-902">Source</a><a href="#impl-Catalog-for-GlueCatalog" class="anchor">§</a><h3 class="code- [...]
     &amp;'life0 self,
-    parent: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'life1 NamespaceIdent&gt;,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="struct" href="https://doc.rust-lang.org/nig [...]
+    parent: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;&amp;'life1 <a class="struct" href="../iceberg/catalog/struct.NamespaceIdent.html" title="struct iceberg::catalog::NamespaceIdent">NamespaceIdent</a>&gt;,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>List namespaces from glue catalog.</p>
 <p>Glue doesn’t support nested namespaces.
 We will return an empty list if parent is some.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.create_namespace" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#337-357">Source</a><a href="#method.create_namespace" class="anchor">§</a><h4 class="code-header">fn <a class="fn">create_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.create_namespace" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#337-357">Source</a><a href="#method.create_namespace" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.create_namespace" class="fn">create_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    namespace: &amp;'life1 NamespaceIdent,
+    namespace: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.NamespaceIdent.html" title="struct iceberg::catalog::NamespaceIdent">NamespaceIdent</a>,
     properties: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;Namespace&gt;&gt; + <a class="trait" href="https://do [...]
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Creates a new namespace with the given identifier and properties.</p>
@@ -28,10 +28,10 @@ successfully converted into a database configuration.</li>
 <li>Errors from the underlying database creation process, converted using
 <code>from_sdk_error</code>.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.get_namespace" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#369-399">Source</a><a href="#method.get_namespace" class="anchor">§</a><h4 class="code-header">fn <a class="fn">get_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.get_namespace" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#369-399">Source</a><a href="#method.get_namespace" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.get_namespace" class="fn">get_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    namespace: &amp;'life1 NamespaceIdent,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;Namespace&gt;&gt; + <a class="trait" href="https://do [...]
+    namespace: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.NamespaceIdent.html" title="struct iceberg::catalog::NamespaceIdent">NamespaceIdent</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Retrieves a namespace by its identifier.</p>
@@ -44,10 +44,10 @@ Constructs a <code>Namespace</code> object with the retrieved data and returns i
 <li>If there is an error querying the database, returned by
 <code>from_sdk_error</code>.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.namespace_exists" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#413-434">Source</a><a href="#method.namespace_exists" class="anchor">§</a><h4 class="code-header">fn <a class="fn">namespace_exists</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.namespace_exists" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#413-434">Source</a><a href="#method.namespace_exists" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.namespace_exists" class="fn">namespace_exists</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    namespace: &amp;'life1 NamespaceIdent,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
+    namespace: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.NamespaceIdent.html" title="struct iceberg::catalog::NamespaceIdent">NamespaceIdent</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Checks if a namespace exists within the Glue Catalog.</p>
@@ -62,11 +62,11 @@ to determine if the specified namespace (database) exists.</p>
 <li><code>Err(...)</code> if an error occurs during validation or the Glue Catalog
 query, with the error encapsulating the issue.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.update_namespace" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#446-472">Source</a><a href="#method.update_namespace" class="anchor">§</a><h4 class="code-header">fn <a class="fn">update_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.update_namespace" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#446-472">Source</a><a href="#method.update_namespace" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.update_namespace" class="fn">update_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    namespace: &amp;'life1 NamespaceIdent,
+    namespace: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.NamespaceIdent.html" title="struct iceberg::catalog::NamespaceIdent">NamespaceIdent</a>,
     properties: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Asynchronously updates properties of an existing namespace.</p>
@@ -77,10 +77,10 @@ in the Glue Catalog.</p>
 <p>Returns <code>Ok(())</code> if the namespace update is successful. If the
 namespace cannot be updated due to missing information or an error
 during the update process, an <code>Err(...)</code> is returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.drop_namespace" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#484-508">Source</a><a href="#method.drop_namespace" class="anchor">§</a><h4 class="code-header">fn <a class="fn">drop_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.drop_namespace" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#484-508">Source</a><a href="#method.drop_namespace" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.drop_namespace" class="fn">drop_namespace</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    namespace: &amp;'life1 NamespaceIdent,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
+    namespace: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.NamespaceIdent.html" title="struct iceberg::catalog::NamespaceIdent">NamespaceIdent</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Asynchronously drops a namespace from the Glue Catalog.</p>
@@ -93,10 +93,10 @@ namespace will not be dropped, but an error is returned instead.</p>
 <li><code>Err(...)</code> signifies failure to drop the namespace due to validation
 errors, connectivity issues, or Glue Catalog constraints.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.list_tables" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#518-552">Source</a><a href="#method.list_tables" class="anchor">§</a><h4 class="code-header">fn <a class="fn">list_tables</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.list_tables" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#518-552">Source</a><a href="#method.list_tables" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.list_tables" class="fn">list_tables</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    namespace: &amp;'life1 NamespaceIdent,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="struct" href="https://doc.rust-lang.org/nig [...]
+    namespace: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.NamespaceIdent.html" title="struct iceberg::catalog::NamespaceIdent">NamespaceIdent</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Asynchronously lists all tables within a specified namespace.</p>
@@ -108,11 +108,11 @@ representing a table within the specified namespace.</li>
 <li><code>Err(...)</code> if an error occurs during namespace validation or while
 querying the database.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.create_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#566-616">Source</a><a href="#method.create_table" class="anchor">§</a><h4 class="code-header">fn <a class="fn">create_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.create_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#566-616">Source</a><a href="#method.create_table" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.create_table" class="fn">create_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    namespace: &amp;'life1 NamespaceIdent,
-    creation: TableCreation,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;Table&gt;&gt; + <a class="trait" href="https://doc.ru [...]
+    namespace: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.NamespaceIdent.html" title="struct iceberg::catalog::NamespaceIdent">NamespaceIdent</a>,
+    creation: <a class="struct" href="../iceberg/catalog/struct.TableCreation.html" title="struct iceberg::catalog::TableCreation">TableCreation</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Creates a new table within a specified namespace using the provided
@@ -125,10 +125,10 @@ table.</p>
 namespace identifiers, failure to determine a default storage location,
 issues generating or writing table metadata, and errors communicating
 with the Glue Catalog.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.load_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#630-633">Source</a><a href="#method.load_table" class="anchor">§</a><h4 class="code-header">fn <a class="fn">load_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.load_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#630-633">Source</a><a href="#method.load_table" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.load_table" class="fn">load_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    table: &amp;'life1 TableIdent,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;Table&gt;&gt; + <a class="trait" href="https://doc.ru [...]
+    table: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.TableIdent.html" title="struct iceberg::catalog::TableIdent">TableIdent</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Loads a table from the Glue Catalog and constructs a <code>Table</code> object
@@ -143,10 +143,10 @@ based on its metadata.</p>
 <li>Absence of metadata location information in the table’s properties.</li>
 <li>Issues reading or deserializing the table’s metadata file.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.drop_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#645-660">Source</a><a href="#method.drop_table" class="anchor">§</a><h4 class="code-header">fn <a class="fn">drop_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.drop_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#645-660">Source</a><a href="#method.drop_table" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.drop_table" class="fn">drop_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    table: &amp;'life1 TableIdent,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
+    table: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.TableIdent.html" title="struct iceberg::catalog::TableIdent">TableIdent</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Asynchronously drops a table from the database.</p>
@@ -160,10 +160,10 @@ attempting to drop the table. This includes scenarios where
 the table does not exist.</li>
 <li>Any network or communication error occurs with the database backend.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.table_exists" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#669-696">Source</a><a href="#method.table_exists" class="anchor">§</a><h4 class="code-header">fn <a class="fn">table_exists</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.table_exists" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#669-696">Source</a><a href="#method.table_exists" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.table_exists" class="fn">table_exists</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    table: &amp;'life1 TableIdent,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
+    table: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.TableIdent.html" title="struct iceberg::catalog::TableIdent">TableIdent</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>Asynchronously checks the existence of a specified table
@@ -174,11 +174,11 @@ in the database.</p>
 <li><code>Ok(false)</code> if the table does not exist in the database.</li>
 <li><code>Err(...)</code> if an error occurs during the process</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.rename_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#704-776">Source</a><a href="#method.rename_table" class="anchor">§</a><h4 class="code-header">fn <a class="fn">rename_table</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.rename_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#704-776">Source</a><a href="#method.rename_table" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.rename_table" class="fn">rename_table</a>&lt;'life0, 'life1, 'life2, 'async_trait&gt;(
     &amp;'life0 self,
-    src: &amp;'life1 TableIdent,
-    dest: &amp;'life2 TableIdent,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
+    src: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.TableIdent.html" title="struct iceberg::catalog::TableIdent">TableIdent</a>,
+    dest: &amp;'life2 <a class="struct" href="../iceberg/catalog/struct.TableIdent.html" title="struct iceberg::catalog::TableIdent">TableIdent</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,
@@ -189,11 +189,11 @@ or moves it between namespaces (databases).</p>
 <li><code>Ok(())</code> on successful rename or move of the table.</li>
 <li><code>Err(...)</code> if an error occurs during the process.</li>
 </ul>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.register_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#789-839">Source</a><a href="#method.register_table" class="anchor">§</a><h4 class="code-header">fn <a class="fn">register_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.register_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#789-839">Source</a><a href="#method.register_table" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.register_table" class="fn">register_table</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
-    table_ident: &amp;'life1 TableIdent,
+    table_ident: &amp;'life1 <a class="struct" href="../iceberg/catalog/struct.TableIdent.html" title="struct iceberg::catalog::TableIdent">TableIdent</a>,
     metadata_location: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;Table&gt;&gt; + <a class="trait" href="https://doc.ru [...]
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,
     'life1: 'async_trait,</div></h4></section></summary><div class="docblock"><p>registers an existing table into the Glue Catalog.</p>
@@ -205,10 +205,10 @@ corresponding table in the Glue Catalog.</p>
 If the registration fails due to validation issues, existing table conflicts,
 metadata problems, or errors during the registration or loading process,
 an <code>Err(...)</code> is returned.</p>
-</div></details><details class="toggle method-toggle" open><summary><section id="method.update_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#841-901">Source</a><a href="#method.update_table" class="anchor">§</a><h4 class="code-header">fn <a class="fn">update_table</a>&lt;'life0, 'async_trait&gt;(
+</div></details><details class="toggle method-toggle" open><summary><section id="method.update_table" class="method trait-impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#841-901">Source</a><a href="#method.update_table" class="anchor">§</a><h4 class="code-header">fn <a href="../iceberg/catalog/trait.Catalog.html#tymethod.update_table" class="fn">update_table</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 self,
-    commit: TableCommit,
-) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;Table&gt;&gt; + <a class="trait" href="https://doc.ru [...]
+    commit: <a class="struct" href="../iceberg/catalog/struct.TableCommit.html" title="struct iceberg::catalog::TableCommit">TableCommit</a>,
+) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title= [...]
     Self: 'async_trait,
     'life0: 'async_trait,</div></h4></section></summary><div class='docblock'>Update a table to the catalog.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-GlueCatalog" class="impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#156-162">Source</a><a href="#impl-Debug-for-GlueCatalog" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://doc.rust-lang.org/nightly/co [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#139">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
diff --git a/api/iceberg_catalog_glue/struct.GlueCatalogBuilder.html b/api/iceberg_catalog_glue/struct.GlueCatalogBuilder.html
index 5e22c3cee..39fb8af81 100644
--- a/api/iceberg_catalog_glue/struct.GlueCatalogBuilder.html
+++ b/api/iceberg_catalog_glue/struct.GlueCatalogBuilder.html
@@ -1,9 +1,9 @@
 <!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Builder for `GlueCatalog`."><title>GlueCatalogBuilder in iceberg_catalog_glue - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,F [...]
-</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-CatalogBuilder-for-GlueCatalogBuilder" class="impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#78-135">Source</a><a href="#impl-CatalogBuilder-for-GlueCatalogBuilder" class="anchor">§</a><h3 class=" [...]
+</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-CatalogBuilder-for-GlueCatalogBuilder" class="impl"><a class="src rightside" href="../src/iceberg_catalog_glue/catalog.rs.html#78-135">Source</a><a href="#impl-CatalogBuilder-for-GlueCatalogBuilder" class="anchor">§</a><h3 class=" [...]
     self,
     name: impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;,
     props: <a class="struct" href="https://doc.rust-lang.org/nightly/std/collections/hash/map/struct.HashMap.html" title="struct std::collections::hash::map::HashMap">HashMap</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;,
-) -&gt; impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;Self::C&gt;&gt; + <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html" title="trait core::marker::Send">Send</a></h4></section></summary><div class='docblock'>Create a new catalog instance.</div></details></div></details><details class="toggle implementors-toggle" open><summ [...]
+) -&gt; impl <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = <a class="type" href="../iceberg/error/type.Result.html" title="type iceberg::error::Result">Result</a>&lt;Self::<a class="associatedtype" href="../iceberg/catalog/trait.CatalogBuilder.html#associatedtype.C" title="type iceberg::catalog::CatalogBuilder::C">C</a>&gt;&gt; + <a class="trait" href="https://doc.rust-lang. [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#139">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: CastFrom&lt;U&gt;,</div></h4></section></summary><div class='docblock'>Casts <code>self</code> to type <code>T</code>. The <a href="https://doc.rust-lang.org/reference/expressions/operator-expr.html#semantics">semantics of numeric casting</a> with the <code>as</code> operator are followed, so <code>&lt;T as As&gt;::as_::&lt;U&gt;</code> can be used in the same way as <code>T as U</code> for numeric conversions. <a>Read more</a></div></details></div></details><details class="toggle [...]
     T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a>,</div></h3></section></summary><div class="impl-items"><section id="method.as_any" class="method trait-impl"><a href="#method.as_any" class="anchor">§</a><h4 class="code-header">fn <a class="fn">as_any</a>(&amp;self) -&gt; &amp;(dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> + 'static)</h4 [...]
diff --git a/api/iceberg_storage_opendal/all.html b/api/iceberg_storage_opendal/all.html
index 75f604b6d..78ab2eebe 100644
--- a/api/iceberg_storage_opendal/all.html
+++ b/api/iceberg_storage_opendal/all.html
@@ -1 +1 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Mediu [...]
\ No newline at end of file
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="List of all items in this crate"><title>List of all items in this crate</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Mediu [...]
\ No newline at end of file
diff --git a/api/iceberg_storage_opendal/enum.OpenDalStorage.html b/api/iceberg_storage_opendal/enum.OpenDalStorage.html
index 4ba405181..d8d1931bd 100644
--- a/api/iceberg_storage_opendal/enum.OpenDalStorage.html
+++ b/api/iceberg_storage_opendal/enum.OpenDalStorage.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpenDAL-based storage implementation."><title>OpenDalStorage in iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48a [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpenDAL-based storage implementation."><title>OpenDalStorage in iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48a [...]
     Memory(Operator),
     LocalFs,
     S3 {
@@ -36,63 +36,63 @@ Expects paths of the form
 Because Azdls accepts multiple possible schemes, we store the full
 passed scheme here to later validate schemes passed via paths.</p>
 </div></div><div class="sub-variant-field"><span id="variant.Azdls.field.config" class="section-header"><a href="#variant.Azdls.field.config" class="anchor field">§</a><code>config: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a>&lt;AzdlsConfig&gt;</code></span><div class="docblock"><p>Azure DLS configuration.</p>
-</div></div></div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpenDalStorage" class="impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#187">Source</a><a href="#impl-Clone-for-OpenDalStorage" class="anchor">§</a><h3 class="code-header">impl <a c [...]
-    __D: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserializer.html" title="trait serde_core::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summar [...]
-    __S: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serializer.html" title="trait serde_core::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-St [...]
+</div></div></div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpenDalStorage" class="impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#190">Source</a><a href="#impl-Clone-for-OpenDalStorage" class="anchor">§</a><h3 class="code-header">impl <a c [...]
+    __D: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserializer.html" title="trait serde_core::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summar [...]
+    __S: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serializer.html" title="trait serde_core::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-St [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Check if a file exists at the given path</div></details><details class="toggle method-toggle" open><summary><section id="method.metadata" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#448-454">Source</a><a href="#method.metadata" class="anchor">§</a><h4 class="code-header">fn <a class="fn">metadata</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Check if a file exists at the given path</div></details><details class="toggle method-toggle" open><summary><section id="method.metadata" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#451-457">Source</a><a href="#method.metadata" class="anchor">§</a><h4 class="code-header">fn <a class="fn">metadata</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;FileMetadata&gt;&gt; + <a class="trait" href="https:/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get metadata from an input path</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#456-463">Source</a><a href="#method.read" class="anchor">§</a><h4 class="code-header">fn <a class="fn">read</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get metadata from an input path</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#459-466">Source</a><a href="#method.read" class="anchor">§</a><h4 class="code-header">fn <a class="fn">read</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;Bytes&gt;&gt; + <a class="trait" href="https://doc.ru [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Read bytes from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#465-470">Source</a><a href="#method.reader" class="anchor">§</a><h4 class="code-header">fn <a class="fn">reader</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Read bytes from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#468-473">Source</a><a href="#method.reader" class="anchor">§</a><h4 class="code-header">fn <a class="fn">reader</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="struct" href="https://doc.rust-lang.org/nig [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get FileRead from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#472-478">Source</a><a href="#method.write" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get FileRead from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#475-481">Source</a><a href="#method.write" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
     bs: Bytes,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Write bytes to an output path</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#480-485">Source</a><a href="#method.writer" class="anchor">§</a><h4 class="code-header">fn <a class="fn">writer</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Write bytes to an output path</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#483-488">Source</a><a href="#method.writer" class="anchor">§</a><h4 class="code-header">fn <a class="fn">writer</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="struct" href="https://doc.rust-lang.org/nig [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get FileWrite from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#487-490">Source</a><a href="#method.delete" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get FileWrite from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#490-493">Source</a><a href="#method.delete" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete a file at the given path</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_prefix" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#492-500">Source</a><a href="#method.delete_prefix" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete_prefix</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete a file at the given path</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_prefix" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#495-503">Source</a><a href="#method.delete_prefix" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete_prefix</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete all files with the given prefix</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_stream" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#502-534">Source</a><a href="#method.delete_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete_stream</a>&lt;'life0, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete all files with the given prefix</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_stream" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#505-537">Source</a><a href="#method.delete_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete_stream</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 self,
     paths: BoxStream&lt;'static, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete multiple files from a stream of paths.</div></details><details class="toggle method-toggle" open><summary><section id="method.new_input" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#537-539">Source</a><a href="#method.new_input" class="anchor">§</a><h4 class="code-header">fn <a class="fn">new_input</a>(&amp;self, path: &amp;<a class="primitive" href= [...]
+    'life0: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete multiple files from a stream of paths.</div></details><details class="toggle method-toggle" open><summary><section id="method.new_input" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#540-542">Source</a><a href="#method.new_input" class="anchor">§</a><h4 class="code-header">fn <a class="fn">new_input</a>(&amp;self, path: &amp;<a class="primitive" href= [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#139">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: CastFrom&lt;U&gt;,</div></h4></section></summary><div class='docblock'>Casts <code>self</code> to type <code>T</code>. The <a href="https://doc.rust-lang.org/reference/expressions/operator-expr.html#semantics">semantics of numeric casting</a> with the <code>as</code> operator are followed, so <code>&lt;T as As&gt;::as_::&lt;U&gt;</code> can be used in the same way as <code>T as U</code> for numeric conversions. <a>Read more</a></div></details></div></details><details class="toggle [...]
     T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a>,</div></h3></section></summary><div class="impl-items"><section id="method.as_any" class="method trait-impl"><a href="#method.as_any" class="anchor">§</a><h4 class="code-header">fn <a class="fn">as_any</a>(&amp;self) -&gt; &amp;(dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> + 'static)</h4 [...]
diff --git a/api/iceberg_storage_opendal/enum.OpenDalStorageFactory.html b/api/iceberg_storage_opendal/enum.OpenDalStorageFactory.html
index 1265bec11..10c9052f6 100644
--- a/api/iceberg_storage_opendal/enum.OpenDalStorageFactory.html
+++ b/api/iceberg_storage_opendal/enum.OpenDalStorageFactory.html
@@ -1,4 +1,4 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpenDAL-based storage factory."><title>OpenDalStorageFactory in iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48a [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpenDAL-based storage factory."><title>OpenDalStorageFactory in iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48a [...]
     Memory,
     Fs,
     S3 {
@@ -23,9 +23,9 @@ Storing the scheme string here to return the correct path.</p>
 </div><section id="variant.Oss" class="variant"><a href="#variant.Oss" class="anchor">§</a><h3 class="code-header">Oss</h3></section><div class="docblock"><p>OSS storage factory.</p>
 </div><section id="variant.Azdls" class="variant"><a href="#variant.Azdls" class="anchor">§</a><h3 class="code-header">Azdls</h3></section><div class="docblock"><p>Azure Data Lake Storage factory.</p>
 </div><div class="sub-variant" id="variant.Azdls.fields"><h4>Fields</h4><div class="sub-variant-field"><span id="variant.Azdls.field.configured_scheme" class="section-header"><a href="#variant.Azdls.field.configured_scheme" class="anchor field">§</a><code>configured_scheme: AzureStorageScheme</code></span><div class="docblock"><p>The configured Azure storage scheme.</p>
-</div></div></div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpenDalStorageFactory" class="impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#97">Source</a><a href="#impl-Clone-for-OpenDalStorageFactory" class="anchor">§</a><h3 class="code-head [...]
-    __D: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserializer.html" title="trait serde_core::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summar [...]
-    __S: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serializer.html" title="trait serde_core::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-St [...]
+</div></div></div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpenDalStorageFactory" class="impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#100">Source</a><a href="#impl-Clone-for-OpenDalStorageFactory" class="anchor">§</a><h3 class="code-hea [...]
+    __D: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserializer.html" title="trait serde_core::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summar [...]
+    __S: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serializer.html" title="trait serde_core::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-St [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#139">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: CastFrom&lt;U&gt;,</div></h4></section></summary><div class='docblock'>Casts <code>self</code> to type <code>T</code>. The <a href="https://doc.rust-lang.org/reference/expressions/operator-expr.html#semantics">semantics of numeric casting</a> with the <code>as</code> operator are followed, so <code>&lt;T as As&gt;::as_::&lt;U&gt;</code> can be used in the same way as <code>T as U</code> for numeric conversions. <a>Read more</a></div></details></div></details><details class="toggle [...]
     T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a>,</div></h3></section></summary><div class="impl-items"><section id="method.as_any" class="method trait-impl"><a href="#method.as_any" class="anchor">§</a><h4 class="code-header">fn <a class="fn">as_any</a>(&amp;self) -&gt; &amp;(dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> + 'static)</h4 [...]
diff --git a/api/iceberg_storage_opendal/index.html b/api/iceberg_storage_opendal/index.html
index b54f225e4..8bd769c4e 100644
--- a/api/iceberg_storage_opendal/index.html
+++ b/api/iceberg_storage_opendal/index.html
@@ -1,7 +1,8 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpenDAL-based storage implementation for Apache Iceberg."><title>iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48 [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpenDAL-based storage implementation for Apache Iceberg."><title>iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48 [...]
 <p>This crate provides <a href="enum.OpenDalStorage.html" title="enum iceberg_storage_opendal::OpenDalStorage"><code>OpenDalStorage</code></a> and <a href="enum.OpenDalStorageFactory.html" title="enum iceberg_storage_opendal::OpenDalStorageFactory"><code>OpenDalStorageFactory</code></a>,
 which implement the <a href="iceberg::io::Storage"><code>Storage</code></a> and
 <a href="iceberg::io::StorageFactory"><code>StorageFactory</code></a> traits from the <code>iceberg</code> crate
 using <a href="https://opendal.apache.org/">OpenDAL</a> as the backend.</p>
 </div></details><h2 id="structs" class="section-header">Structs<a href="#structs" class="anchor">§</a></h2><dl class="item-table"><dt><a class="struct" href="struct.AwsCredential.html" title="struct iceberg_storage_opendal::AwsCredential">AwsCredential</a></dt><dd>Credential that holds the <code>access_key</code> and <code>secret_key</code>.</dd><dt><a class="struct" href="struct.CustomAwsCredentialLoader.html" title="struct iceberg_storage_opendal::CustomAwsCredentialLoader">Custom<wbr> [...]
-This can be used to load credentials from a custom source, such as the AWS SDK.</dd></dl><h2 id="enums" class="section-header">Enums<a href="#enums" class="anchor">§</a></h2><dl class="item-table"><dt><a class="enum" href="enum.OpenDalStorage.html" title="enum iceberg_storage_opendal::OpenDalStorage">Open<wbr>DalStorage</a></dt><dd>OpenDAL-based storage implementation.</dd><dt><a class="enum" href="enum.OpenDalStorageFactory.html" title="enum iceberg_storage_opendal::OpenDalStorageFactor [...]
\ No newline at end of file
+This can be used to load credentials from a custom source, such as the AWS SDK.</dd><dt><a class="struct" href="struct.OpenDalResolvingStorage.html" title="struct iceberg_storage_opendal::OpenDalResolvingStorage">Open<wbr>DalResolving<wbr>Storage</a></dt><dd>A resolving storage that auto-detects the scheme from a path and delegates
+to the appropriate <a href="enum.OpenDalStorage.html" title="enum iceberg_storage_opendal::OpenDalStorage"><code>OpenDalStorage</code></a> variant.</dd><dt><a class="struct" href="struct.OpenDalResolvingStorageFactory.html" title="struct iceberg_storage_opendal::OpenDalResolvingStorageFactory">Open<wbr>DalResolving<wbr>Storage<wbr>Factory</a></dt><dd>A resolving storage factory that creates <a href="struct.OpenDalResolvingStorage.html" title="struct iceberg_storage_opendal::OpenDalResolv [...]
\ No newline at end of file
diff --git a/api/iceberg_storage_opendal/resolving/struct.OpenDalResolvingStorage.html b/api/iceberg_storage_opendal/resolving/struct.OpenDalResolvingStorage.html
new file mode 100644
index 000000000..85f2f67e6
--- /dev/null
+++ b/api/iceberg_storage_opendal/resolving/struct.OpenDalResolvingStorage.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../iceberg_storage_opendal/struct.OpenDalResolvingStorage.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../iceberg_storage_opendal/struct.OpenDalResolvingStorage.html">../../iceberg_storage_opendal/struct.OpenDalResolvingStorage.html</a>...</p>
+    <script>location.replace("../../iceberg_storage_opendal/struct.OpenDalResolvingStorage.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/api/iceberg_storage_opendal/resolving/struct.OpenDalResolvingStorageFactory.html b/api/iceberg_storage_opendal/resolving/struct.OpenDalResolvingStorageFactory.html
new file mode 100644
index 000000000..a15ffece3
--- /dev/null
+++ b/api/iceberg_storage_opendal/resolving/struct.OpenDalResolvingStorageFactory.html
@@ -0,0 +1,11 @@
+<!DOCTYPE html>
+<html lang="en">
+<head>
+    <meta http-equiv="refresh" content="0;URL=../../iceberg_storage_opendal/struct.OpenDalResolvingStorageFactory.html">
+    <title>Redirection</title>
+</head>
+<body>
+    <p>Redirecting to <a href="../../iceberg_storage_opendal/struct.OpenDalResolvingStorageFactory.html">../../iceberg_storage_opendal/struct.OpenDalResolvingStorageFactory.html</a>...</p>
+    <script>location.replace("../../iceberg_storage_opendal/struct.OpenDalResolvingStorageFactory.html" + location.search + location.hash);</script>
+</body>
+</html>
\ No newline at end of file
diff --git a/api/iceberg_storage_opendal/sidebar-items.js b/api/iceberg_storage_opendal/sidebar-items.js
index c44e1224e..ae1ce6e29 100644
--- a/api/iceberg_storage_opendal/sidebar-items.js
+++ b/api/iceberg_storage_opendal/sidebar-items.js
@@ -1 +1 @@
-window.SIDEBAR_ITEMS = {"enum":["OpenDalStorage","OpenDalStorageFactory"],"struct":["AwsCredential","CustomAwsCredentialLoader"],"trait":["AwsCredentialLoad"]};
\ No newline at end of file
+window.SIDEBAR_ITEMS = {"enum":["OpenDalStorage","OpenDalStorageFactory"],"struct":["AwsCredential","CustomAwsCredentialLoader","OpenDalResolvingStorage","OpenDalResolvingStorageFactory"],"trait":["AwsCredentialLoad"]};
\ No newline at end of file
diff --git a/api/iceberg_storage_opendal/enum.OpenDalStorage.html b/api/iceberg_storage_opendal/struct.OpenDalResolvingStorage.html
similarity index 58%
copy from api/iceberg_storage_opendal/enum.OpenDalStorage.html
copy to api/iceberg_storage_opendal/struct.OpenDalResolvingStorage.html
index 4ba405181..de511ac79 100644
--- a/api/iceberg_storage_opendal/enum.OpenDalStorage.html
+++ b/api/iceberg_storage_opendal/struct.OpenDalResolvingStorage.html
@@ -1,104 +1,69 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpenDAL-based storage implementation."><title>OpenDalStorage in iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48a [...]
-    Memory(Operator),
-    LocalFs,
-    S3 {
-        configured_scheme: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>,
-        config: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a>&lt;S3Config&gt;,
-        customized_credential_load: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="struct.CustomAwsCredentialLoader.html" title="struct iceberg_storage_opendal::CustomAwsCredentialLoader">CustomAwsCredentialLoader</a>&gt;,
-    },
-    Gcs {
-        config: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a>&lt;GcsConfig&gt;,
-    },
-    Oss {
-        config: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a>&lt;OssConfig&gt;,
-    },
-    Azdls {
-        configured_scheme: AzureStorageScheme,
-        config: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a>&lt;AzdlsConfig&gt;,
-    },
-}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>OpenDAL-based storage implementation.</p>
-</div></details><h2 id="variants" class="variants section-header">Variants<a href="#variants" class="anchor">§</a></h2><div class="variants"><section id="variant.Memory" class="variant"><a href="#variant.Memory" class="anchor">§</a><h3 class="code-header">Memory(Operator)</h3></section><div class="docblock"><p>Memory storage variant.</p>
-</div><section id="variant.LocalFs" class="variant"><a href="#variant.LocalFs" class="anchor">§</a><h3 class="code-header">LocalFs</h3></section><div class="docblock"><p>Local filesystem storage variant.</p>
-</div><section id="variant.S3" class="variant"><a href="#variant.S3" class="anchor">§</a><h3 class="code-header">S3</h3></section><div class="docblock"><p>S3 storage variant.</p>
-</div><div class="sub-variant" id="variant.S3.fields"><h4>Fields</h4><div class="sub-variant-field"><span id="variant.S3.field.configured_scheme" class="section-header"><a href="#variant.S3.field.configured_scheme" class="anchor field">§</a><code>configured_scheme: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a></code></span><div class="docblock"><p>s3 storage could have <code>s3://</code> and <cod [...]
-Storing the scheme string here to return the correct path.</p>
-</div></div><div class="sub-variant-field"><span id="variant.S3.field.config" class="section-header"><a href="#variant.S3.field.config" class="anchor field">§</a><code>config: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a>&lt;S3Config&gt;</code></span><div class="docblock"><p>S3 configuration.</p>
-</div></div><div class="sub-variant-field"><span id="variant.S3.field.customized_credential_load" class="section-header"><a href="#variant.S3.field.customized_credential_load" class="anchor field">§</a><code>customized_credential_load: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="struct.CustomAwsCredentialLoader.html" title="struct iceberg_storage_opendal::CustomAwsCredentialL [...]
-</div></div></div><section id="variant.Gcs" class="variant"><a href="#variant.Gcs" class="anchor">§</a><h3 class="code-header">Gcs</h3></section><div class="docblock"><p>GCS storage variant.</p>
-</div><div class="sub-variant" id="variant.Gcs.fields"><h4>Fields</h4><div class="sub-variant-field"><span id="variant.Gcs.field.config" class="section-header"><a href="#variant.Gcs.field.config" class="anchor field">§</a><code>config: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a>&lt;GcsConfig&gt;</code></span><div class="docblock"><p>GCS configuration.</p>
-</div></div></div><section id="variant.Oss" class="variant"><a href="#variant.Oss" class="anchor">§</a><h3 class="code-header">Oss</h3></section><div class="docblock"><p>OSS storage variant.</p>
-</div><div class="sub-variant" id="variant.Oss.fields"><h4>Fields</h4><div class="sub-variant-field"><span id="variant.Oss.field.config" class="section-header"><a href="#variant.Oss.field.config" class="anchor field">§</a><code>config: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a>&lt;OssConfig&gt;</code></span><div class="docblock"><p>OSS configuration.</p>
-</div></div></div><section id="variant.Azdls" class="variant"><a href="#variant.Azdls" class="anchor">§</a><h3 class="code-header">Azdls</h3></section><div class="docblock"><p>Azure Data Lake Storage variant.
-Expects paths of the form
-<code>abfs[s]://&lt;filesystem&gt;@&lt;account&gt;.dfs.&lt;endpoint-suffix&gt;/&lt;path&gt;</code> or
-<code>wasb[s]://&lt;container&gt;@&lt;account&gt;.blob.&lt;endpoint-suffix&gt;/&lt;path&gt;</code>.</p>
-</div><div class="sub-variant" id="variant.Azdls.fields"><h4>Fields</h4><div class="sub-variant-field"><span id="variant.Azdls.field.configured_scheme" class="section-header"><a href="#variant.Azdls.field.configured_scheme" class="anchor field">§</a><code>configured_scheme: AzureStorageScheme</code></span><div class="docblock"><p>The configured Azure storage scheme.
-Because Azdls accepts multiple possible schemes, we store the full
-passed scheme here to later validate schemes passed via paths.</p>
-</div></div><div class="sub-variant-field"><span id="variant.Azdls.field.config" class="section-header"><a href="#variant.Azdls.field.config" class="anchor field">§</a><code>config: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html" title="struct alloc::sync::Arc">Arc</a>&lt;AzdlsConfig&gt;</code></span><div class="docblock"><p>Azure DLS configuration.</p>
-</div></div></div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpenDalStorage" class="impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#187">Source</a><a href="#impl-Clone-for-OpenDalStorage" class="anchor">§</a><h3 class="code-header">impl <a c [...]
-    __D: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserializer.html" title="trait serde_core::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summar [...]
-    __S: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serializer.html" title="trait serde_core::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-St [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A resolving storage that auto-detects the scheme from a path and delegates to the appropriate `OpenDalStorage` variant."><title>OpenDalResolvingStorage in iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","Sou [...]
+to the appropriate <a href="enum.OpenDalStorage.html" title="enum iceberg_storage_opendal::OpenDalStorage"><code>OpenDalStorage</code></a> variant.</p>
+<p>Sub-storages are lazily created on first use for each scheme and cached
+for subsequent operations.</p>
+</div></details><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Debug-for-OpenDalResolvingStorage" class="impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#200">Source</a><a href="#impl-Debug-for-OpenDalResolvingStorage" class="anchor">§</a><h3 class="code-h [...]
+    __D: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserializer.html" title="trait serde_core::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summar [...]
+    __S: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serializer.html" title="trait serde_core::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-St [...]
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Check if a file exists at the given path</div></details><details class="toggle method-toggle" open><summary><section id="method.metadata" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#448-454">Source</a><a href="#method.metadata" class="anchor">§</a><h4 class="code-header">fn <a class="fn">metadata</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Check if a file exists at the given path</div></details><details class="toggle method-toggle" open><summary><section id="method.metadata" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#260-262">Source</a><a href="#method.metadata" class="anchor">§</a><h4 class="code-header">fn <a class="fn">metadata</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;FileMetadata&gt;&gt; + <a class="trait" href="https:/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get metadata from an input path</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#456-463">Source</a><a href="#method.read" class="anchor">§</a><h4 class="code-header">fn <a class="fn">read</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get metadata from an input path</div></details><details class="toggle method-toggle" open><summary><section id="method.read" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#264-266">Source</a><a href="#method.read" class="anchor">§</a><h4 class="code-header">fn <a class="fn">read</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;Bytes&gt;&gt; + <a class="trait" href="https://doc.ru [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Read bytes from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#465-470">Source</a><a href="#method.reader" class="anchor">§</a><h4 class="code-header">fn <a class="fn">reader</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Read bytes from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.reader" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#268-270">Source</a><a href="#method.reader" class="anchor">§</a><h4 class="code-header">fn <a class="fn">reader</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="struct" href="https://doc.rust-lang.org/nig [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get FileRead from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#472-478">Source</a><a href="#method.write" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get FileRead from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.write" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#272-274">Source</a><a href="#method.write" class="anchor">§</a><h4 class="code-header">fn <a class="fn">write</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
     bs: Bytes,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Write bytes to an output path</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#480-485">Source</a><a href="#method.writer" class="anchor">§</a><h4 class="code-header">fn <a class="fn">writer</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Write bytes to an output path</div></details><details class="toggle method-toggle" open><summary><section id="method.writer" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#276-278">Source</a><a href="#method.writer" class="anchor">§</a><h4 class="code-header">fn <a class="fn">writer</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="struct" href="https://doc.rust-lang.org/nig [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get FileWrite from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#487-490">Source</a><a href="#method.delete" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Get FileWrite from a path</div></details><details class="toggle method-toggle" open><summary><section id="method.delete" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#280-282">Source</a><a href="#method.delete" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete a file at the given path</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_prefix" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#492-500">Source</a><a href="#method.delete_prefix" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete_prefix</a>&lt;'life0, 'life1, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete a file at the given path</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_prefix" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#284-286">Source</a><a href="#method.delete_prefix" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete_prefix</a>&lt;'life0, 'life1, 'async_trait&gt;(
     &amp;'life0 self,
     path: &amp;'life1 <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.str.html">str</a>,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
     'life0: 'async_trait,
-    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete all files with the given prefix</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_stream" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#502-534">Source</a><a href="#method.delete_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete_stream</a>&lt;'life0, 'async_trait&gt;(
+    'life1: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete all files with the given prefix</div></details><details class="toggle method-toggle" open><summary><section id="method.delete_stream" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#288-304">Source</a><a href="#method.delete_stream" class="anchor">§</a><h4 class="code-header">fn <a class="fn">delete_stream</a>&lt;'life0, 'async_trait&gt;(
     &amp;'life0 self,
     paths: BoxStream&lt;'static, <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>&gt;,
 ) -&gt; <a class="struct" href="https://doc.rust-lang.org/nightly/core/pin/struct.Pin.html" title="struct core::pin::Pin">Pin</a>&lt;<a class="struct" href="https://doc.rust-lang.org/nightly/alloc/boxed/struct.Box.html" title="struct alloc::boxed::Box">Box</a>&lt;dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/future/future/trait.Future.html" title="trait core::future::future::Future">Future</a>&lt;Output = Result&lt;<a class="primitive" href="https://doc.rust-lang.org/ [...]
     Self: 'async_trait,
-    'life0: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete multiple files from a stream of paths.</div></details><details class="toggle method-toggle" open><summary><section id="method.new_input" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#537-539">Source</a><a href="#method.new_input" class="anchor">§</a><h4 class="code-header">fn <a class="fn">new_input</a>(&amp;self, path: &amp;<a class="primitive" href= [...]
+    'life0: 'async_trait,</div></h4></section></summary><div class='docblock'>Delete multiple files from a stream of paths.</div></details><details class="toggle method-toggle" open><summary><section id="method.new_input" class="method trait-impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#306-311">Source</a><a href="#method.new_input" class="anchor">§</a><h4 class="code-header">fn <a class="fn">new_input</a>(&amp;self, path: &amp;<a class="primitive" [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#139">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: CastFrom&lt;U&gt;,</div></h4></section></summary><div class='docblock'>Casts <code>self</code> to type <code>T</code>. The <a href="https://doc.rust-lang.org/reference/expressions/operator-expr.html#semantics">semantics of numeric casting</a> with the <code>as</code> operator are followed, so <code>&lt;T as As&gt;::as_::&lt;U&gt;</code> can be used in the same way as <code>T as U</code> for numeric conversions. <a>Read more</a></div></details></div></details><details class="toggle [...]
     T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a>,</div></h3></section></summary><div class="impl-items"><section id="method.as_any" class="method trait-impl"><a href="#method.as_any" class="anchor">§</a><h4 class="code-header">fn <a class="fn">as_any</a>(&amp;self) -&gt; &amp;(dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> + 'static)</h4 [...]
     T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#214">Source</a><a href="#method.borrow" class="anchor">§</a><h4 class="code-header">fn <a href="https:/ [...]
-    T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#222">Source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.clone_to_uninit" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/clone.rs.html#517">Source</a><a href="#method.clone_to_uninit" class="anchor">§</a><h4 class="code-header">unsaf [...]
+    T: ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.borrow_mut" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#222">Source</a><a href="#method.borrow_mut" class="anchor">§</a><h4 class="code-header">fn <a href= [...]
     T: AsAny + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.is" class="method trait-impl"><a href="#method.is" class="anchor">§</a><h4 class="code-header">fn <a class="fn">is</a>&lt;T&gt;(&amp;self) -&gt; <a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitiv [...]
     T: AsAny,</div></h4></section></summary><div class='docblock'>Returns <code>true</code> if the boxed type is the same as <code>T</code>. <a>Read more</a></div></details><details class="toggle method-toggle" open><summary><section id="method.downcast_ref" class="method trait-impl"><a href="#method.downcast_ref" class="anchor">§</a><h4 class="code-header">fn <a class="fn">downcast_ref</a>&lt;T&gt;(&amp;self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum [...]
     T: AsAny,</div></h4></section></summary><div class='docblock'>Forward to the method defined on the type <code>Any</code>.</div></details><details class="toggle method-toggle" open><summary><section id="method.downcast_mut" class="method trait-impl"><a href="#method.downcast_mut" class="anchor">§</a><h4 class="code-header">fn <a class="fn">downcast_mut</a>&lt;T&gt;(&amp;mut self) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum co [...]
@@ -127,8 +92,7 @@ otherwise. <a href="https://docs.rs/either/1/either/into_either/trait.IntoEither
     T: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html" title="trait serde_core::ser::Serialize">Serialize</a> + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><section id="method.erased_serialize" class="method trait-impl"><a class="src rightside" href="https://docs.rs/erased-serde/0.4.10/src/erased_serd [...]
     &amp;self,
     serializer: &amp;mut dyn <a class="trait" href="https://docs.rs/erased-serde/0.4.10/erased_serde/ser/trait.Serializer.html" title="trait erased_serde::ser::Serializer">Serializer</a>,
-) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, ErrorImpl&gt;</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-ToOwned-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#85-87">Source</a><a hre [...]
-    T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html" title="trait core::clone::Clone">Clone</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Owned" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/alloc/borrow.rs.html#89">Source</a><a href="#associatedtype.Owned" class="anchor">§</a><h4 class="code-header">type <a href=" [...]
+) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, ErrorImpl&gt;</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-TryFrom%3CU%3E-for-T" class="impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#827-829">Sou [...]
     U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.Into.html" title="trait core::convert::Into">Into</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error-1" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#831">Source</a><a href="#associatedtype.Error-1" class="anchor">§</a><h4 class="code-hea [...]
     U: <a class="trait" href="https://doc.rust-lang.org/nightly/core/convert/trait.TryFrom.html" title="trait core::convert::TryFrom">TryFrom</a>&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><details class="toggle" open><summary><section id="associatedtype.Error" class="associatedtype trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/convert/mod.rs.html#815">Source</a><a href="#associatedtype.Error" class="anchor">§</a><h4 class="cod [...]
     V: MultiLane&lt;T&gt;,</div></h3></section></summary><div class="impl-items"><section id="method.vzip" class="method trait-impl"><a href="#method.vzip" class="anchor">§</a><h4 class="code-header">fn <a class="fn">vzip</a>(self) -&gt; V</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-WithSubscriber-for-T" class="impl"><a href="#impl-WithSubscriber-for-T" class="anchor">§</a><h3 class="code-header">impl&lt;T&gt; WithSubscriber for T< [...]
diff --git a/api/iceberg_storage_opendal/enum.OpenDalStorageFactory.html b/api/iceberg_storage_opendal/struct.OpenDalResolvingStorageFactory.html
similarity index 62%
copy from api/iceberg_storage_opendal/enum.OpenDalStorageFactory.html
copy to api/iceberg_storage_opendal/struct.OpenDalResolvingStorageFactory.html
index 1265bec11..a1b763de8 100644
--- a/api/iceberg_storage_opendal/enum.OpenDalStorageFactory.html
+++ b/api/iceberg_storage_opendal/struct.OpenDalResolvingStorageFactory.html
@@ -1,31 +1,23 @@
-<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="OpenDAL-based storage factory."><title>OpenDalStorageFactory in iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48a [...]
-    Memory,
-    Fs,
-    S3 {
-        configured_scheme: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a>,
-        customized_credential_load: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="struct.CustomAwsCredentialLoader.html" title="struct iceberg_storage_opendal::CustomAwsCredentialLoader">CustomAwsCredentialLoader</a>&gt;,
-    },
-    Gcs,
-    Oss,
-    Azdls {
-        configured_scheme: AzureStorageScheme,
-    },
-}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>OpenDAL-based storage factory.</p>
-<p>Maps scheme to the corresponding OpenDalStorage storage variant.
-Use this factory with <code>FileIOBuilder::new(factory)</code> to create FileIO instances.</p>
-</div></details><h2 id="variants" class="variants section-header">Variants<a href="#variants" class="anchor">§</a></h2><div class="variants"><section id="variant.Memory" class="variant"><a href="#variant.Memory" class="anchor">§</a><h3 class="code-header">Memory</h3></section><div class="docblock"><p>Memory storage factory.</p>
-</div><section id="variant.Fs" class="variant"><a href="#variant.Fs" class="anchor">§</a><h3 class="code-header">Fs</h3></section><div class="docblock"><p>Local filesystem storage factory.</p>
-</div><section id="variant.S3" class="variant"><a href="#variant.S3" class="anchor">§</a><h3 class="code-header">S3</h3></section><div class="docblock"><p>S3 storage factory.</p>
-</div><div class="sub-variant" id="variant.S3.fields"><h4>Fields</h4><div class="sub-variant-field"><span id="variant.S3.field.configured_scheme" class="section-header"><a href="#variant.S3.field.configured_scheme" class="anchor field">§</a><code>configured_scheme: <a class="struct" href="https://doc.rust-lang.org/nightly/alloc/string/struct.String.html" title="struct alloc::string::String">String</a></code></span><div class="docblock"><p>s3 storage could have <code>s3://</code> and <cod [...]
-Storing the scheme string here to return the correct path.</p>
-</div></div><div class="sub-variant-field"><span id="variant.S3.field.customized_credential_load" class="section-header"><a href="#variant.S3.field.customized_credential_load" class="anchor field">§</a><code>customized_credential_load: <a class="enum" href="https://doc.rust-lang.org/nightly/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;<a class="struct" href="struct.CustomAwsCredentialLoader.html" title="struct iceberg_storage_opendal::CustomAwsCredentialL [...]
-</div></div></div><section id="variant.Gcs" class="variant"><a href="#variant.Gcs" class="anchor">§</a><h3 class="code-header">Gcs</h3></section><div class="docblock"><p>GCS storage factory.</p>
-</div><section id="variant.Oss" class="variant"><a href="#variant.Oss" class="anchor">§</a><h3 class="code-header">Oss</h3></section><div class="docblock"><p>OSS storage factory.</p>
-</div><section id="variant.Azdls" class="variant"><a href="#variant.Azdls" class="anchor">§</a><h3 class="code-header">Azdls</h3></section><div class="docblock"><p>Azure Data Lake Storage factory.</p>
-</div><div class="sub-variant" id="variant.Azdls.fields"><h4>Fields</h4><div class="sub-variant-field"><span id="variant.Azdls.field.configured_scheme" class="section-header"><a href="#variant.Azdls.field.configured_scheme" class="anchor field">§</a><code>configured_scheme: AzureStorageScheme</code></span><div class="docblock"><p>The configured Azure storage scheme.</p>
-</div></div></div></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpenDalStorageFactory" class="impl"><a class="src rightside" href="../src/iceberg_storage_opendal/lib.rs.html#97">Source</a><a href="#impl-Clone-for-OpenDalStorageFactory" class="anchor">§</a><h3 class="code-head [...]
-    __D: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserializer.html" title="trait serde_core::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summar [...]
-    __S: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serializer.html" title="trait serde_core::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-St [...]
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="A resolving storage factory that creates `OpenDalResolvingStorage` instances."><title>OpenDalResolvingStorageFactory in iceberg_storage_opendal - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff [...]
+<p>This factory accepts paths from any supported storage system and dynamically
+delegates operations to the appropriate <a href="enum.OpenDalStorage.html" title="enum iceberg_storage_opendal::OpenDalStorage"><code>OpenDalStorage</code></a> variant based on
+the path scheme.</p>
+<h2 id="example"><a class="doc-anchor" href="#example">§</a>Example</h2>
+<div class="example-wrap ignore"><a href="#" class="tooltip" title="This example is not tested">ⓘ</a><pre class="rust rust-example-rendered"><code><span class="kw">use </span>std::sync::Arc;
+<span class="kw">use </span>iceberg::io::FileIOBuilder;
+<span class="kw">use </span>iceberg_storage_opendal::OpenDalResolvingStorageFactory;
+
+<span class="kw">let </span>factory = OpenDalResolvingStorageFactory::new();
+<span class="kw">let </span>file_io = FileIOBuilder::new(Arc::new(factory))
+    .with_prop(<span class="string">"s3.region"</span>, <span class="string">"us-east-1"</span>)
+    .build();</code></pre></div></div></details><h2 id="implementations" class="section-header">Implementations<a href="#implementations" class="anchor">§</a></h2><div id="implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-OpenDalResolvingStorageFactory" class="impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#166-181">Source</a><a href="#impl-OpenDalResolvingStorageFactory" class="anchor">§</a><h3 class=" [...]
+</div></details><details class="toggle method-toggle" open><summary><section id="method.with_s3_credential_loader" class="method"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#177-180">Source</a><h4 class="code-header">pub fn <a href="#method.with_s3_credential_loader" class="fn">with_s3_credential_loader</a>(
+    self,
+    loader: <a class="struct" href="struct.CustomAwsCredentialLoader.html" title="struct iceberg_storage_opendal::CustomAwsCredentialLoader">CustomAwsCredentialLoader</a>,
+) -&gt; Self</h4></section></summary><div class="docblock"><p>Set a custom AWS credential loader for S3 storage.</p>
+</div></details></div></details></div><h2 id="trait-implementations" class="section-header">Trait Implementations<a href="#trait-implementations" class="anchor">§</a></h2><div id="trait-implementations-list"><details class="toggle implementors-toggle" open><summary><section id="impl-Clone-for-OpenDalResolvingStorageFactory" class="impl"><a class="src rightside" href="../src/iceberg_storage_opendal/resolving.rs.html#152">Source</a><a href="#impl-Clone-for-OpenDalResolvingStorageFactory" c [...]
+    __D: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserializer.html" title="trait serde_core::de::Deserializer">Deserializer</a>&lt;'de&gt;,</div></h4></section></summary><div class='docblock'>Deserialize this value from the given Serde deserializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html#tymethod.deserialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summar [...]
+    __S: <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serializer.html" title="trait serde_core::ser::Serializer">Serializer</a>,</div></h4></section></summary><div class='docblock'>Serialize this value into the given Serde serializer. <a href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html#tymethod.serialize">Read more</a></div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-St [...]
     T: 'static + ?<a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h3></section></summary><div class="impl-items"><details class="toggle method-toggle" open><summary><section id="method.type_id" class="method trait-impl"><a class="src rightside" href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#139">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
     T: CastFrom&lt;U&gt;,</div></h4></section></summary><div class='docblock'>Casts <code>self</code> to type <code>T</code>. The <a href="https://doc.rust-lang.org/reference/expressions/operator-expr.html#semantics">semantics of numeric casting</a> with the <code>as</code> operator are followed, so <code>&lt;T as As&gt;::as_::&lt;U&gt;</code> can be used in the same way as <code>T as U</code> for numeric conversions. <a>Read more</a></div></details></div></details><details class="toggle [...]
     T: <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a>,</div></h3></section></summary><div class="impl-items"><section id="method.as_any" class="method trait-impl"><a href="#method.as_any" class="anchor">§</a><h4 class="code-header">fn <a class="fn">as_any</a>(&amp;self) -&gt; &amp;(dyn <a class="trait" href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html" title="trait core::any::Any">Any</a> + 'static)</h4 [...]
diff --git a/api/search.index/00252847c56a.js b/api/search.index/00252847c56a.js
deleted file mode 100644
index a7c694c0b..000000000
--- a/api/search.index/00252847c56a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBFAAAGxxtiwRcFAEcAABa0HLUcZsYbE4MCoDAAABm7cHMbAqBwAAAbH2FlCQKhAAAAHJ+gsAAAHGBhb0sDoEAAABuroKAAABvrY3F0BQBJAAAGnhx2HhsFAcAAAAZ5HAGuGzNxBQHAAAAC5RoEQhxpb0cChIagMAAAG+mgIAAAG62gcAAAHDCgMAAAG+rAiAMjgQKgYAAAGxxjdBceAImgkAAAGx2gAAAACmOg8AAAHJGhQAAAHMYckRYBPg0AAA==")
\ No newline at end of file
diff --git a/api/search.index/00467055ccd8.js b/api/search.index/00467055ccd8.js
new file mode 100644
index 000000000..a4d309265
--- /dev/null
+++ b/api/search.index/00467055ccd8.js
@@ -0,0 +1 @@
+rn_("AQKEoEAAABkHoHAAABkfoDAAABhtoJAAABrPAgMCOzAAAAEAANEAAgD/DAAAMA/QAAUBxAAAA7gaBpocdHYFAUMAABGTGhwcAyYbaW7pEfsDaW9y")
\ No newline at end of file
diff --git a/api/search.index/008e2e090c0b.js b/api/search.index/008e2e090c0b.js
new file mode 100644
index 000000000..b1ff4a44d
--- /dev/null
+++ b/api/search.index/008e2e090c0b.js
@@ -0,0 +1 @@
+rn_("BQHAAAAH+xwBUBxhbwUBxAAAAjIdAS4dYW8jhQKgAAAAHMZkZgUBxAAABiMdAxMdb3QbAqDgAAAdPmhvNwGDh6AwAAAcc6GAAAAdU6BAAAAcsaBQAAAcxyyIAw==")
\ No newline at end of file
diff --git a/api/search.index/00b00c1a074a.js b/api/search.index/00b00c1a074a.js
new file mode 100644
index 000000000..52e5ce4bc
--- /dev/null
+++ b/api/search.index/00b00c1a074a.js
@@ -0,0 +1 @@
+rn_("BQBGAAAFvxxyDRsxRwAAzhprHGwczhz1AEYAAAkWHXL6F9cY2BjZGNoY2xjcGN0Y0BoYHBkcGhwbHJAckRyaHAUBwAAAAdkQArgaZXljAAOwYBxFAPhkdHb3JBcAAAEAAQB5AYkB5QItAAUASwAAGBkdGh13+Bv7Amx0cwCEoDAAABN9IUgAOzAAAAEAAAcAAgD6EAAAoxIGAA==")
\ No newline at end of file
diff --git a/api/search.index/00ec0b06ead1.js b/api/search.index/00ec0b06ead1.js
deleted file mode 100644
index ddb4979cd..000000000
--- a/api/search.index/00ec0b06ead1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHpBwizRfOF5cab3kjAQKwYBnDAhpsdDowAAABAAAAAAAJABAAAADAEMEQ1hHXEdgR2RFtF4gYvhvUHAUBxQAAKG4cqxysHATeHGFvBQHAAAAEwhoisRiyGD0cb3kVAEoAAAYOHWTBHP8cBQHAAAACWhwJ7RxpbxMIAqAwAAAckmZp9/QbAABCAAEARQAMAAEANgAhRQAAyxzaHNscJQBAAAAD8xtpzxvQG0gcIUIAAMEZwhldHDFBAAC/GsAawRqNHAUBwAAAFcwbvhwC8ht1efMBhAIBAzowAAABAAAAAAAMABAAAADMF6wYrRiuGK8YsBhqGvga1hs8HKMcrhzYHPsCZWzzAANwdHUBNxYAABUAQQAABeoad3oXexcVAEAAABTHHMgcbbAapxz7AmRuRQBDAAAA3BtzcRiTGUMbRBsWHCsCoEAAABrrYWkFAEEAACVAG/kb+ht3URoFAcAAAAoXHAfxG2x [...]
\ No newline at end of file
diff --git a/api/search.index/01a9a8c83dd8.js b/api/search.index/01a9a8c83dd8.js
deleted file mode 100644
index af7d2cd2b..000000000
--- a/api/search.index/01a9a8c83dd8.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQBEAAAH5hpy+hb7FvwW/Rb+Fv8WABcbAqAgAAAOM2F5AQAAOzAAAAEAABYABQBnDAYAlBcGAFUaBgDyGgAAMRwAAAUAQwAABgodZPEc8wIBc/I8DQAAAQAFAcgAAAcIHGCCGYMZhBmFGYYZhxmIGXJzBQBAAAAE5htjGhvzAwFzAZMaAAATAQKggAAAG6pmcgEsDgAABQHAAAASehhaHBljHO0caW8TAAOwMBmeAvSwMBmfAAFmaXA6MAAAAQAAAAAADgAQAAAAUBbYF9kXwhjIGckZxxrPGvQbNhw3HHwciByJHL8cKwKgMAAAGMVmc/sCY25lAEQAAAbOG3K2GLcYuBi5GLoYuxi8GCsCoGAAABphY3TFAEUAABbuG+8bcHIX+hr7Gvwa/Rr+Gv8aRRtGG0cbSBtJG0ob+wJsciFEAACxG7Ibfxy3DwCJoIAAABjaoFAAABroNGEWOjAAAAEAAAAAAAwAEAAAADQ [...]
\ No newline at end of file
diff --git a/api/search.index/01e6f6a3b913.js b/api/search.index/01e6f6a3b913.js
deleted file mode 100644
index 0a5b00437..000000000
--- a/api/search.index/01e6f6a3b913.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBLAAAGEx1kCR0bAqEwAAAdCGFzZQBEAAAJZhxwoxekF6UXphenF6gXqRdVAEAAAAjPGnQeDh8OIA4hDpsXnBcFAcsAAAThHAXsHHFz8wgBcDswAAABAAAGAAEAaxoGABUATQAABPIcZg8dEB0jAAOgEAAAGYGggAAAHERtc3QBHQ4AAFcDAoagcAAAGaWg8AAAHH4IqAb0YBMAAAEAGgMBAPsCYWk=")
\ No newline at end of file
diff --git a/api/search.index/0285794e6292.js b/api/search.index/0285794e6292.js
deleted file mode 100644
index b87e11039..000000000
--- a/api/search.index/0285794e6292.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUUAAEAb+Rv6GwUBwAAADKIcCDgcZW4FAEoAABTHHMgcbaccFQBGAAAUaxxsHG1DHMMc8wCEIIASOzAAAAEAAIMAAwDdDAAAiA6BAFEaAAA=")
\ No newline at end of file
diff --git a/api/search.index/02870b5bdf16.js b/api/search.index/02870b5bdf16.js
new file mode 100644
index 000000000..192710d96
--- /dev/null
+++ b/api/search.index/02870b5bdf16.js
@@ -0,0 +1 @@
+rn_("IUEAAAsSyhrLGjUBQwAAFy0c3BwAKRdmc1gWWRZaFlsWMUAAAAQRfhKWGJgYBQBAAAADBRxq+xslAEMAABHDHN4cZbQa6BzpHGMBA6AgAAAbWmlsc/WoFQAASgLUAQEABgH/AIWgEAAADlMpQAQ=")
\ No newline at end of file
diff --git a/api/search.index/02a3411a04f0.js b/api/search.index/02a3411a04f0.js
deleted file mode 100644
index ec6c6cd75..000000000
--- a/api/search.index/02a3411a04f0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBFAAAIcxxjZBrpHAUBwAAAAnkYFsgXkhlichsCoEAAABwiYW/zAAJ0dffKEAAAfgEBAAEAlQYBAIIBVQBAAAAFihpldhZ3FncYeBiHGogaGwKwYBqLAAFmdBsCoGAAABnOZW8FAcAAABGjCicWEtYM+BZhdQEAA6BAAAAcd7BAGuwAAaAAAAAXkWZtczswAAABAAAVAAcAEhcOAJYaAAAkGwAATxsAADgcAADJHAAA+hwBABsCsAAI0AjrZG4FAcEAAANjGhLhF4MacnUFAEAAAAR5F3XPCBsDoLAAAByPoDAAAA42cXJ4BQBBAAAGCx1k9BwTiQKgQAAAHNJtb0sDoCAAABYmoDAAABuzYmdslzsAjKAwAAAYw6BAAAAcWaAgAAAWdaCAAAAc9aAgAAAbBDcpRzowAAABAAAAAAARABAAAABnAWgBaQEZBDsOgg6DDoQOWxZcFhAXERdOF+oZuBtjHMIc7Rw=")
\ No newline at end of file
diff --git a/api/search.index/02afc21d9d3d.js b/api/search.index/02afc21d9d3d.js
new file mode 100644
index 000000000..940fcdb49
--- /dev/null
+++ b/api/search.index/02afc21d9d3d.js
@@ -0,0 +1 @@
+rn_("BQBFAAAGCxxm/xcFAEIAAAZOHWQ1HfsCaXQVAUYAAAYKHAivHGJ3/Rf+F/MAAmNzOjAAAAEAAAAAABsAEAAAALoKuwqiDKMMpAxeDV8Ntxi4GMwZCxwWHD0cPhw/HEAcQRxCHEMcRBxKHE4cTxyPHL0c9xz4HBcd")
\ No newline at end of file
diff --git a/api/search.index/02b73713dd8c.js b/api/search.index/02b73713dd8c.js
deleted file mode 100644
index bbb1158c9..000000000
--- a/api/search.index/02b73713dd8c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBGAAAQOhtWHHLpGkMBhKEgAAAcxKAwAAAbHKCAAAAZ4AiQAjowAAABAAAAAAAKABAAAAC2CPgI+QhsFgoYpBilGLEbshu/G38c")
\ No newline at end of file
diff --git a/api/search.index/04031a2b3215.js b/api/search.index/04031a2b3215.js
new file mode 100644
index 000000000..08b556174
--- /dev/null
+++ b/api/search.index/04031a2b3215.js
@@ -0,0 +1 @@
+rn_("BQHAAAAFfxMJ9RlhbQUBwAAACfQZCrkaY2wFAcAAAAMiHRObGpwabHUhSAAAsBzuHO8c84ICYW8FAEEAAAeNGmGZFvOBAml11wAAhqBgAAAbG6DAAAAbHqEgAAAcxdEQAQFwDgAA")
\ No newline at end of file
diff --git a/api/search.index/0404fbf5b9bb.js b/api/search.index/0404fbf5b9bb.js
deleted file mode 100644
index bbefb0d8d..000000000
--- a/api/search.index/0404fbf5b9bb.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAU3RreGm18GfMCAWnydRgAAAEAFQBBAAAUUhxTHG0bHBwc8wcBafUIGwAANgABAA0BawAFAcQAAAF4GgqyHGlu+wNjb3A1AEMAAAGNHGk8HKMcrhzYHBOIAqAwAAAcPXN0MUAAAEgOeRchHHgcBQHAAAAKLhwH2xphaQUBwAAABbQZBncaY2wVAEUAAAb5HGTKHPYcE4MDoMAAABxooDAAAByqZm5zBQJAAAAZ5BzlHAe9HBiUHJUcaXBzLBcbAqCAAAAafnJzAQCPoDAAABs2sGAZegABd9Kfr4cVS8OgxPJICxVoJJnQoGAAABm1oQAAABxpUqTAE/agsIAapwABJ93CkinZJVOUBq2voOAAAByCMUEGBz+UoDAAABcPoDAAABDU9fhHOzAAAAEAAD8AEQCoCgcAzQwAAA8NIQBZGAAA2xgAAIAZAAAwGwAA+xsAAAQcAAB0HAAAehwAAH0cAADzHAAA+Rw [...]
\ No newline at end of file
diff --git a/api/search.index/048b6ba21c37.js b/api/search.index/048b6ba21c37.js
deleted file mode 100644
index 96fcd0952..000000000
--- a/api/search.index/048b6ba21c37.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUMAAEgXxBi8HBUAQgAAAYccacIMwwwhRwAAMBcxF4AYJQBGAAARlho4HGlbFlwWThcBBgA7MAAAAQAAqwACAPAZVQBUG1UAJQBLAAAE8hxmohwPHRAd+wJxcgUBwwAAUKAQoRCiEKMQYhNjEzCcGp0anhqfGmFl9wMAh6BQAAAXNxTgDDowAAABAAAAAAAfABAAAACZCm4MbwxwDHEMcgxzDHQMdQx2DHcMhQ5LFioXKxdeF18XYBdzF3QXkReqF6sXwxrEGvkaDBsbG9wb7BuaHAEd")
\ No newline at end of file
diff --git a/api/search.index/04d23049f1cd.js b/api/search.index/04d23049f1cd.js
new file mode 100644
index 000000000..e76dcaa87
--- /dev/null
+++ b/api/search.index/04d23049f1cd.js
@@ -0,0 +1 @@
+rn_("BQBBAAAGTx1kOB0ThgKgQAAAHRVtbwUATAAABhcdZpgcGwKgIAAAHL9vdcsEsIAbMQFBoKAAABx7YXFzdBsCoDAAABijZW8=")
\ No newline at end of file
diff --git a/api/search.index/04e830e0e3e4.js b/api/search.index/04e830e0e3e4.js
new file mode 100644
index 000000000..8d9fb6683
--- /dev/null
+++ b/api/search.index/04e830e0e3e4.js
@@ -0,0 +1 @@
+rn_("MUkAANsa3BrdGt4aMUMAAJAbkRt2HJUc8wACbHU6MAAAAQAAAAAAEQAQAAAAcgxzDHQMdQx2DHcMeAx5DHoMXA7bEOMQmBYVGBYYrxjFGN8c")
\ No newline at end of file
diff --git a/api/search.index/05346cd1e671.js b/api/search.index/05346cd1e671.js
new file mode 100644
index 000000000..274b40968
--- /dev/null
+++ b/api/search.index/05346cd1e671.js
@@ -0,0 +1 @@
+rn_("BQBSAAAGUR1kQB0FAFQAAAZSHWRDHfOEAnB0BQBRAAAGTh1kNR0FAFgAAAZXHWRNHQUAUgAABlUdZEYdBQBPAAAGUB1kOx3zhwJjcAUASQAABj0dZA0dE4QDoMAAAB0coIAAABz6ZnBzGwKhQAAAHTpmbAUAWgAABlYdZEgd+wJhZacZAMlmgp/O6x2gwAAAHJqgwAAAHJugMAAAGAMAC4QdAXIbAAAlAUAAAB7WHNccM40TWxcCGM8ZZndcFhkdGh1FAEEAABSTHJQcbWMYZBhlGFwcXRwFAEUAAARVHGUMGhsCoCAAABqkdXkzA4SwIBeAAAGgQAAAGqUCAQM6MAAAAQAAAAAACwAQAAAA9hCGFocWahdrF7wYRxtlG30bfhuNHPocKwKgAAAADlRwcrUBQgAABxkZBrQcYXZNGE4YAxkEGcoZyxnxGvIaLxwwHNoc2xwFAcUAACiwHO4c7xwEIh1hbwUBwAAABAE [...]
\ No newline at end of file
diff --git a/api/search.index/055735b0bf46.js b/api/search.index/055735b0bf46.js
deleted file mode 100644
index 694342988..000000000
--- a/api/search.index/055735b0bf46.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQFDAAAFBBsGzBx0dy0b8RsFAEcAAAwBHWE5HCMEA6AgAAAcraBgAAAa2HJ0dgFJHAAAGwKg0AAAHF9jdAUBQwAABtYaBtcaYm9fFhOBAqDgAAAcKWFjAQIAOzAAAAEAAMUAAgCnEAAAKRTEAIcOAIigwAAAGtWgQAAAE0KgkAAAGNGhEAAAHKQxkAc7MAAAAQAAyAAEAN4IAQCPCgAAjQvEAIYOAAABAISgMAAAEKygMAAAEK2gQAAAE0ugcAAAF70AFQE6MAAAAQAAAAAAIQAQAAAAuwi8CL0Ivgi/CMAIwQjCCMMIxAjFCMYIUwpUClUKVgrGENEQQhNTE1QTQhfLF9cY4xjkGOYY5xiQGr0bwxsUHB8cXhz7AnJ3CYSgYAAAHQiAF0YAExxqvefyPDugUAAAF70oIAIFAUEAAAfVGgIkDmFy3QjzAANhZW/yXAEAAAEA")
\ No newline at end of file
diff --git a/api/search.index/05bc084d52c9.js b/api/search.index/05bc084d52c9.js
new file mode 100644
index 000000000..01f0d7db5
--- /dev/null
+++ b/api/search.index/05bc084d52c9.js
@@ -0,0 +1 @@
+rn_("BQHAAAAH/BwBURxhbwUBxAAAAjMdAS8dYW8jhQKgAAAAHMhkZgUBxAAABiQdAxQdb3QbAqDgAAAdP2hvNwGGh6AwAAAcdKGAAAAdVKBAAAAcsqBQAAAcySyIAwUBwAAAB/scAVAcYW8FAcQAAAIyHQEuHWFvI4UCoAAAABzGZGYFAcQAAAYjHQMTHW90GwKg4AAAHT5obzcBhoegMAAAHHOhgAAAHVOgQAAAHLGgUAAAHMcsiAM7A6CQAAAbemNmcA==")
\ No newline at end of file
diff --git a/api/search.index/05d3c9c28bd8.js b/api/search.index/05d3c9c28bd8.js
deleted file mode 100644
index 7ec29512c..000000000
--- a/api/search.index/05d3c9c28bd8.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHBAAACYBYMJxxmbgUBxAAAAVoYBdQaaXP7AmxvBQHFAAACrRkDchprbhsCoLAAABsxY3UzAISgcAAAGFugcAAAGFwFAAb1rggAAAEAAQABAC8AKwKhcAAAHRBhcw==")
\ No newline at end of file
diff --git a/api/search.index/06f47ba65d1a.js b/api/search.index/06f47ba65d1a.js
deleted file mode 100644
index 9c46a7c1a..000000000
--- a/api/search.index/06f47ba65d1a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQBCAAAGDR1k4BmbHM8c/BwrAqBgAAAaVGZ0FQBEAAAEwxtlSRfWGIuEsGAcJgDasAAMxgAxoAAAAAi5ZAEABQBFAAAGxxtiwRcFAEcAABa0HLUcZsYbE4MCoDAAABm7cHMbAqBwAAAbH2FlCQKhAAAAHJ+gsAAAHGBhb0sDoEAAABuroKAAABvrY3F0BQBJAAAGnhx2HhsFAcAAAAZ5HAGuGzNxBQHAAAAC5RoEQhxpb0cChIagMAAAG+mgIAAAG62gcAAAHDCgMAAAG+rAiAMjgQKgYAAAGxxjdBcPAoigkAAAGx2g8AAAHJGhQAAAHMYMkRYBPg0AAPsDZXV5")
\ No newline at end of file
diff --git a/api/search.index/06f48c230cfd.js b/api/search.index/06f48c230cfd.js
deleted file mode 100644
index 851dcaf00..000000000
--- a/api/search.index/06f48c230cfd.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("UUUAANQY4RniGUAb+Rv6GyUAQQAABXMYYzkOgA6BDhsCoEAAABVybHAFAsAAAAdEHB8qHCscA6EZaXJ5AQYAOzAAAAEAAKsAAgDwGVUAVBtVACUASwAABPIcZqIcDx0QHfsCcXIxRAAAnBqdGp4anxo7A7CAGpYBomNlbgUAQQAAJNYZ1xkLG2NkEwUATgAABhMdZAkd84ECcHcFAEEAABTHHMgcbaccE4cCoKAAABzeaXYbAqCAAAAbO2FyBQHAAAAKHhwAgRllcxUAQgAABz8cbTUXDBhVAUMAAAeGGgA5Fm9zvhC/ENMR1BHVEV8YGwKgYAAAGzdjdBUAQgAAFJUaUBtjfxmuGgUBwAAAB7kcARAcYW8FAcQAAALvHAHrHGFvI4UCoAAAAByGZGYFAcQAAAbgHAPRHG90GwKg4AAAHPtobzcCAYigMAAAHDOhgAAAHRCwQBxrAAGgQAAAHHCgUAAAHIcsmAPyQxw [...]
\ No newline at end of file
diff --git a/api/search.index/072b39a56e19.js b/api/search.index/072b39a56e19.js
deleted file mode 100644
index 0897c379d..000000000
--- a/api/search.index/072b39a56e19.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBAAAASThpgGmufEFFCAAAqDscXZBxlHJYclxwVAFAAAAYNHWTPHPwc1QFCAAAJZhwG2hpwclcXWBdZF1oXWxdcF10XoxekF6UXphenF6gXqRf7AmJye4Sg8AAAHIwBQQE=")
\ No newline at end of file
diff --git a/api/search.index/0755f0558464.js b/api/search.index/0755f0558464.js
deleted file mode 100644
index c6e05d13a..000000000
--- a/api/search.index/0755f0558464.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAGEx1kCR0xSAAA8BjxGPAaOBv7AmFlJQBBAAARrxuBHGV1GqUcphybhKBgAAAb67AwELcFfkEAEQUASQAABnEcYokaE4ECsFAYvgABZncrAqAgAAAZ1GJuBQHAAAAHvBcFUBpydNcAAMagQAAAHHOgQAAAENSwoBq9AAFARBAK9qAKAAA2AmwACwmrAAEB")
\ No newline at end of file
diff --git a/api/search.index/075dfcafaed8.js b/api/search.index/075dfcafaed8.js
new file mode 100644
index 000000000..c0c95c381
--- /dev/null
+++ b/api/search.index/075dfcafaed8.js
@@ -0,0 +1 @@
+rn_("NQBFAAAWSR1KHWS3HLgcKx0sHQEGADswAAABAAAeAAEAbxgeAAUAQQAABk8dZDgdE4ICoEAAAB0VbW/7AmlvBQBFAAAGCxxm/xcFAEIAAAZOHWQ1HfsCaXQFAcEAABD6GfsZCSAZZnN1AUIAAAHoGgQmHGlz1BjVGOwZ7Rk2G3sbfBtkHAUAQgAAAkcdbTwdI4cCoIAAAB1LYWtjAgOgoAAAHUFhY2sBixwAABUAQgAAB4AcbW8XSBgjgQKgMAAAGbpia/OBAmVpAYMCoNAAAB0QoQAAAB0gY3AFAEgAAAcFHXNrG/MCAmZ383gNAAABAAEAFQBEAAAGUh1kBB1DHQEDAaAwAAAYbmo7MAAAAQAAxgACAAANAAABEMUAAQOEoEAAABkHoHAAABkfoDAAABhtoJAAABrPAgMCOzAAAAEAANEAAgD/DAAAMA/QAAUBwAAABrUcDUIdbG4VAUUAAAYKHAivHGJ3/Rf+F/s [...]
\ No newline at end of file
diff --git a/api/search.index/078409530252.js b/api/search.index/078409530252.js
deleted file mode 100644
index ad02896a0..000000000
--- a/api/search.index/078409530252.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUEAAN0RixqMGjUBQwAAF+wbmhwA7xZmcyEWIhYjFiQWMUAAANoQThJaGFwYBQBAAAADxBtquhslAEMAAAGBHGV1GqUcphxjAQOgIAAAGxtpbHP1cRUAAEcC0QEBAAQB/wCFoBAAAA4vKUAE")
\ No newline at end of file
diff --git a/api/search.index/07c58e251287.js b/api/search.index/07c58e251287.js
new file mode 100644
index 000000000..d3b8d853a
--- /dev/null
+++ b/api/search.index/07c58e251287.js
@@ -0,0 +1 @@
+rn_("BQHAAAAH5xwiBxgIGNYab3kFAcAAABUAGh4cBPEbaXnzAQJsdDowAAABAAAAAAAJABAAAADqEOsQAxIEEgUSBhKnF8QY/xsYHQ==")
\ No newline at end of file
diff --git a/api/search.index/07d5515d9e7a.js b/api/search.index/07d5515d9e7a.js
new file mode 100644
index 000000000..e5a4646bd
--- /dev/null
+++ b/api/search.index/07d5515d9e7a.js
@@ -0,0 +1 @@
+rn_("FQFJAAAHzRwFnhxiZiMbKh01AUIAABctHNwcACkXZnNYFlkWWhZbFgUARQAABkscYqYYBQHBAAACpxgCpRhidPMAAXT03hAAAA0BAQA4BkUBQgAAJPIb8xvBHAUnG2N3eRd6F1kYWhhgGysCoEAAABnIZWkFAUQAAA9CHRL6GfsZY3L8FwUBwAAAI+AY4RgAHAl4G2FvtwwCiLAwF3gEiaBwAAAZ/KAwAAAYWzSYEvVYDgAAAQAwAP4I0QD7A2VpdA==")
\ No newline at end of file
diff --git a/api/search.index/0837661bec4f.js b/api/search.index/0837661bec4f.js
new file mode 100644
index 000000000..0509e9af7
--- /dev/null
+++ b/api/search.index/0837661bec4f.js
@@ -0,0 +1 @@
+rn_("BQLAAAAS3BndGQLxGQeiGGFvciFDAADbGTQc1BwFAcAAABK2GJwcGaUcMR1pbwUBxgAACZUcCZYcY3YFAcAAAATbEA0FHG9yZwsAi6DQAAAbd7BwGfQAkqBQAAAWnKCgAAAZ9qBAAAAQ2qCgAAAZ9z2hDjowAAABAAAAAAAWABAAAABgAWEBYgHYA4gWEhgTGP4YBRoGGgYbDhsQHBEcNRx3HHgciRy+HMAcyhzLHAId")
\ No newline at end of file
diff --git a/api/search.index/084bed2462a9.js b/api/search.index/084bed2462a9.js
new file mode 100644
index 000000000..40ab86517
--- /dev/null
+++ b/api/search.index/084bed2462a9.js
@@ -0,0 +1 @@
+rn_("FQBEAAADcxtsDxlxHDFIAADgHOQc9hz9HDFCAAAGHBQcSBxSHAUBwAAADEQdDSodYWgPB4eggAAAHP+ggAAAHQihUAAAHUygoAAAHTQeABzzgQJwdgUASAAABuEcdl0bWwOgIAAAHMRsb3I=")
\ No newline at end of file
diff --git a/api/search.index/08a3beda5170.js b/api/search.index/08a3beda5170.js
deleted file mode 100644
index 664aaf3cf..000000000
--- a/api/search.index/08a3beda5170.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHIAAAHkBwDghxlcGUAQAAABYoaZU0NdhZ3FncYeBiHGogaoUEAALMKqhAEGAUYBhgHGAgY4RriGikcihy/AIWgMAAAF7mwYBqLAAFhAAY=")
\ No newline at end of file
diff --git a/api/search.index/08d3491423ee.js b/api/search.index/08d3491423ee.js
new file mode 100644
index 000000000..7fe1535ca
--- /dev/null
+++ b/api/search.index/08d3491423ee.js
@@ -0,0 +1 @@
+rn_("BQHAAAAGuxwB7xszcQUBwAAAAiQbBIMcaW9HAoSGoDAAABwqoCAAABvuoHAAABxxoDAAABwrwIgDKwKgYAAAG1tjdA==")
\ No newline at end of file
diff --git a/api/search.index/092663e33a37.js b/api/search.index/092663e33a37.js
new file mode 100644
index 000000000..69db60380
--- /dev/null
+++ b/api/search.index/092663e33a37.js
@@ -0,0 +1 @@
+rn_("FQBFAAAGDBxiBBjnGEMAA6BAAAAXfKBwAAAZGGVtdwH4DAAAFQBAAABQGBsZGy0bDxxuHCUddBAdIB0FAcAAABXxGvIaArYaYW/VAEcAAAQ2HWbUGdUZ1hnXGdgZ2RnaGfUbKRwuHDEc5RxTHVQdGwKgYAAAG1pjdAUARAAAAwkcbmEXBQHAAAAF8BoWuRrsGmxuBQHAAAADIh1T5xfoF5sanBr8Gv0abHUFAsMAAAgIHQJIHAj2HGN1dyMEAqBgAAAbImJwAZ0WAAAhRwAAsBzuHO8c+wJsdPsCYW/zAIc0oAY7MAAAAQAAEQAHAOwIAACRCgAAchMBAM0XAAAmGQUAFRoFACocAAA=")
\ No newline at end of file
diff --git a/api/search.index/09a2d13296a1.js b/api/search.index/09a2d13296a1.js
deleted file mode 100644
index 9a6ed6215..000000000
--- a/api/search.index/09a2d13296a1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUUAADYXDRgOGBUARgAABhIdZN0cBB3zgQJldxUAQgAAFCEceBx1PRfZGDFFAADwGPEY8Bo4G7uEsAAZogErACAL")
\ No newline at end of file
diff --git a/api/search.index/0a45a1ecc55d.js b/api/search.index/0a45a1ecc55d.js
new file mode 100644
index 000000000..5dbcd708a
--- /dev/null
+++ b/api/search.index/0a45a1ecc55d.js
@@ -0,0 +1 @@
+rn_("ZQJGAAAhHxggGOMZArkYEroYuxhpbHK5FukX6heZGJoYUxxUHLUBQAAANrwaRxyzHBsdBd8cYmN+E8AWwRYnFygXoBgpGioayBqBHIIcrBwjAgKwIBdKAAFucgHYEAAAFQBMAAAAgRtzNBtWHPsCZWkFAFEAAAZOHWQ1HQUAWAAABlcdZE0d84cCcnZRRQAAZxZoFmkWahZrFmwWJQFHAAAWgBtmHAIkGWJyhReRGBEbBQJBAAAUGR0aHQIPHQZkG3Bydl8bUUMAAPER8hHzEfQR9RH2EfsCbnQFAEQAAAcFHXNrGyOCA7BwGvkAAaBgAAAanW10dSsCoLAAABrQb3IFAcAAAAYQGxaEF1QbaHL3FwDKsFATkgABexQqUgyOAEm0HDswAAABAAA8AAIA6AM5AHgNAgA=")
\ No newline at end of file
diff --git a/api/search.index/0ab4dfbacfff.js b/api/search.index/0ab4dfbacfff.js
deleted file mode 100644
index 7053dac5c..000000000
--- a/api/search.index/0ab4dfbacfff.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBHAAAY1RzWHHe3GwUBwAAAlQ0bDhsPGxAbERsSGxMbGBwZHI8cBnsabnQVAEQAAAReHGXzGvQaBQHGAAAH2RwFwBxmdJMAhLDQHKUAAaBQAAAdCjUAAAHTCAAAJQBEAAAGDR1k4BnPHPwctwQAh7AwEkcKIIATWAAT27AAF1IAAYoBBzswAAABAABzAQwA0AcAAHcKAADHEAIA5xFfAGIWAQCMFlgApxkBAPAZVQBUG1UA4BsDAKocAADxHAAA")
\ No newline at end of file
diff --git a/api/search.index/0abf8ac1e2ad.js b/api/search.index/0abf8ac1e2ad.js
deleted file mode 100644
index b1a40465c..000000000
--- a/api/search.index/0abf8ac1e2ad.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAABUg4KFRtlaQUBRAAAB6wbB8IcY3MsGwEBAbAAEa4AAXM7MAAAAQAAEwAJANEMAABNDgQA8hcBAPoXAQAtGAEAUhgBAO4ZAQApGwEA9xsBAEsDoEAAAByvoIAAABqQY2x0ZQBEAAAGDB1kshmzGZoamxqoHKkc9xzzBQFj8ooWAAABABsCoCAAABYgZW8FAEQAAAMgG3dwFQUBwAAAA0cTQAMNBA0FDQYNBw1hZfsCcnQ7A7CQHM0AD2FydQUAQQAABgsdZPQcE4wCoEAAABzSbW8FAcUAAATZGgU1G3Fz+wJhbxUASQAABHccZvoc+xwVAEkAAAbzHGQFG7YcFQBMAAAGBh1kdhzoHBUATAAABgUdZHUc5xz7AmFp5wEBhaCAAAAcLAQwBvRTDAAAJgoBALUAJQBGAAADFBtmFBi6GrsaOwOgEAAADFRlaW8VAEIAAAM7F2GsEa0RS4SgsAAAG6ugYAAAGOO [...]
\ No newline at end of file
diff --git a/api/search.index/0b032fbc76d4.js b/api/search.index/0b032fbc76d4.js
deleted file mode 100644
index d95eab7e1..000000000
--- a/api/search.index/0b032fbc76d4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQBFAAAGBhxiZBjsGe0ZBQHAAAAHkxwFgBxmdAUBwAAAFGMY6xkG2RxvcgUARgAABMMbZdYYVwUBh7DwHOIAAbAwGI8AAaBQAAAcwCaAFjowAAABAAAAAAAHABAAAAAoDtsQ3BDdECAYFBv1G/YbFQBCAAABIBxprxoYG/sCZWw=")
\ No newline at end of file
diff --git a/api/search.index/0ba0054f8ec8.js b/api/search.index/0ba0054f8ec8.js
new file mode 100644
index 000000000..a7d6514ba
--- /dev/null
+++ b/api/search.index/0ba0054f8ec8.js
@@ -0,0 +1 @@
+rn_("BQBBAAAUHBsdG225GfMCAWnysRgAAAEAFQBBAAAUkxyUHG1cHF0c8wcBafVHGwAANgABAA8BbQAFAcQAAAG3Ggr1HGlu+wNjb3A1AEMAAAHPHGl9HOYc8RwcHROIAqAwAAAcfnN0BQHAAAAKbxwHGhthaQUBwAAABfEZBrYaY2wVAEUAAAY9HWQNHTodE4MDoMAAAByqoDAAABztZm5zZyoAirBgGbcAAaBgAAAZ8qEAAAAcq7CAGuYAAaDgAAAcxOS4AzswAAABAAA0AAwA7gwAADANIgCVGAAAvRkAAG8bAAA8HAAARRwAADcdAAA9HQAASR0BAE4dBABVHQIA")
\ No newline at end of file
diff --git a/api/search.index/0bf4f2000a6e.js b/api/search.index/0bf4f2000a6e.js
new file mode 100644
index 000000000..647d29078
--- /dev/null
+++ b/api/search.index/0bf4f2000a6e.js
@@ -0,0 +1 @@
+rn_("BQHFAAAosBzuHO8cBCIdYW8FAcAAAAQBGyLtGO4YfhxveRUASgAABlIdZAQdQx0FAcAAAAKcHAkxHWlvEwgCoDAAABzUZmn3NRwAAEIAAQBGAAwAAQA3ACFFAAAOHR4dHx0lAEAAAAM0HGkQHBEciRwhQgAA/hn/GZ8cMUEAAP4a/xoAG88cBQHAAAAVDRwBHQIzHHV58wGEAgEDOjAAAAEAAAAAAAwAEAAAAAYY6BjpGOoY6xjsGKkaNxsXHH0c5hzxHBwd+wJlbPMAA3B0dQFvFgAAFQBBAAAFKRt3tBe1FxUAQAAAFAodCx1t7xrqHPsCZG5FAEQAAAAdHHOtGNAZghuDG1ccBQBBAAAlfxs6HDscd5Aa5xwCyaCAAAAcMqAgAAAXfaBgAAAcwEBMBQs7MAAAAQAABgADAPoRAwCGHAAA+xwBABsCoAAAAA5TaXk=")
\ No newline at end of file
diff --git a/api/search.index/0bfa4569e0de.js b/api/search.index/0bfa4569e0de.js
new file mode 100644
index 000000000..f2de523ae
--- /dev/null
+++ b/api/search.index/0bfa4569e0de.js
@@ -0,0 +1 @@
+rn_("BQHAAABUgRMsFy0XLhcvFzAXBDEXaHQFAcEAAAJcFgEBG3J0MUIAAGEYYhgIGrMaZQBDAAADdhdh3RHeEd8R4BHhEeIR4xEFAcAAAAiMGiWiF6MXpBdvdQEAzaAgAAAOdxFY2Kt8AaCwAAAZ+bBAGMYAASLnBomKOqAwAAAYbhQQ4j1v5qDAAAAb8FsDK55LWgL2zbIUp6BAAAAWXbBgF6UAAaAgAAAOeMDMMQ87MAAAAQAAEgIGADoEAADoBsUAAA0AAAEQxQAkFYIAKhcBAA==")
\ No newline at end of file
diff --git a/api/search.index/0c4cf030cf5b.js b/api/search.index/0c4cf030cf5b.js
new file mode 100644
index 000000000..86aff93af
--- /dev/null
+++ b/api/search.index/0c4cf030cf5b.js
@@ -0,0 +1 @@
+rn_("IUUAAPoY+xgpGwUARgAABhcdZpgcBQBFAAAGsxxiyBoFAEAAAAQnHGNZG/MCAnN3AdIaAAArAqBgAAAaEWFppwIAhrBgHSgAAaCAAAAb66AwAAAajjAAFzswAAABAABUABMAzQoCANMMAQBqDQAAUA4AAFsOAABhDgAAzhAAAAoSAACEEh4AehMAAKIWAACxFwEAtBcBAGwYAABvGB4A4BkBAN8aAABoHAAA9RwAAA==")
\ No newline at end of file
diff --git a/api/search.index/0c5d33974521.js b/api/search.index/0c5d33974521.js
new file mode 100644
index 000000000..791383e7e
--- /dev/null
+++ b/api/search.index/0c5d33974521.js
@@ -0,0 +1 @@
+rn_("dQFCAAAB6BoEJhxpc9QY1RjsGe0ZNht7G3wbZBwFAEIAAAJHHW08HSOHAqCAAAAdS2FrYwIDoKAAAB1BYWNrAYscAAAVAEIAAAeAHG1vF0gYI4ECoDAAABm6Ymv7AmVpBQHBAAAIbBsDQxthdDFAAACOCv4QCRHeGQEDADswAAABAADFAAEAqhLFAAEAADswAAABAADGAAIA0woAAHsNxQAbAqAgAAAcTGR05wEAhqBAAAAa16BgAAAdDyAhFjowAAABAAAAAAAkABAAAABJBO4H7wf2DE0OVw74EAERAhEIEdYRjhNUFokWihaLFqgWSRePF5AXBxgIGO0Y7hgGGREZjhq4GsEa1hpDG2wbeBsyHH4cEx0UHauEsFAZygABoGAAABtyEQAF")
\ No newline at end of file
diff --git a/api/search.index/0c6402c6f75b.js b/api/search.index/0c6402c6f75b.js
deleted file mode 100644
index 0cabb04fe..000000000
--- a/api/search.index/0c6402c6f75b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAFuRkEchxjcwUAQgAAAgMdbfgcI4cCoIAAAB0HYWsjDgKgoAAAHP1hYwFKHAAAS4QQHLtrxKCgQAAAGOSgUAAAGZQYAAP7AmVp")
\ No newline at end of file
diff --git a/api/search.index/0c79e57acae3.js b/api/search.index/0c79e57acae3.js
deleted file mode 100644
index 5b6b2f389..000000000
--- a/api/search.index/0c79e57acae3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("cUAAAC8WghmDGYQZhRmGGYcZiBkFAcEAAAQtHBWEGggccXMFAcsAAAThHAXsHHFzYUUAAFUaVhpXGlgaWRpaGlsaJwcBh6DAAAAcMbBAGGwAAaBwAAAagxGhAzswAAABAAAkAAgAtRABAMERAwAVGAYAkRgGAOMZBgBrGgYAmRoAAKcaAQAbArAQGZ8AAWN0")
\ No newline at end of file
diff --git a/api/search.index/0c9ef78c117f.js b/api/search.index/0c9ef78c117f.js
new file mode 100644
index 000000000..fcc7d9c44
--- /dev/null
+++ b/api/search.index/0c9ef78c117f.js
@@ -0,0 +1 @@
+rn_("AQADoEAAABy5sEAbKwABoAAAABfLZm1zOzAAAAEAABsADQAEEQAAfhIAAHIWAABMFw4AlhgAAJgYAACiGAAA1RoAAGMbAACOGwAAeRwAAAwdAAA+HQEA")
\ No newline at end of file
diff --git a/api/search.index/0caef73265d9.js b/api/search.index/0caef73265d9.js
deleted file mode 100644
index 83dd95efc..000000000
--- a/api/search.index/0caef73265d9.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQBAAAAjSBfEGLwcdHMXdBeqF6sX9QBDAAAS0BrwHHVEDkUORg5HDm8WQRe3GbgZRxpIGnoarRrfGhkbgxyQHAUBQwAABr4cAl0cYnLWGyOHAqBAAAAcFmZzOwOgcAAAGF9hb3IFAcAAABGkEEgTCesabnQFAEQAAAD5GnOUGgUDwAAACDcbBN4YA8YQMMwIXgpfClAaZGxyeBUARgAAFg0cDhxmbxhwGCMAAqBQAAAbr2xzAWAcAAArAqEwAAAcimJs9wUAyaCAAAAYYKAwAAAQqKBgAAAcnkBMoAs7MAAAAQAA4AASAFUBAgB4AcQAJwQAADwEAABHBAcAoAcAALIIAQCKCgAArRAAAOcWAAABFwAAJhcAAGsXAQDhFwAA9BcAAF4aAACDGgAAHhsAAA==")
\ No newline at end of file
diff --git a/api/search.index/0cbafb5a1d11.js b/api/search.index/0cbafb5a1d11.js
new file mode 100644
index 000000000..022df3b7b
--- /dev/null
+++ b/api/search.index/0cbafb5a1d11.js
@@ -0,0 +1 @@
+rn_("BQPCAAAX/Bv9GwMdHTI0GDUYaRhqGBI2GDcYaGpzeWUBQgAAFkUcPR1WGBwZHBocGxyQHJEcZHYkFyUXJhefGCgaDR06HSsCdWUeoxWeZW0rAqDgAAAc0W9yAQIAOzAAAAEAAMcAAgBPDgAAChHGAGFAAACpDDkYOhg7GDwYPRg+GAUARQAABhsdYqwcFQBBAAAEXhxmLh0vHRUAQgAABH8cZjIdMx37AmFvIUUAAPMZSBtJG9MBhLAwG1UAAQCoEPVIFwAA3QF5AdIBAwBFAEIAAAMJHG5VFmEXiReKF9ca+wNlbHhFAEQAABg2HDccZOwQCBIJEpwYyRobAqDQAAAdEXJ0BQBBAAAUHBsdG225GfMCAWnysRgAAAEAFQBBAAAUkxyUHG1cHF0c8wcBafVHGwAANgABAA8BbQAFAcQAAAG3Ggr1HGlu+wNjb3A1AEMAAAHPHGl9HOYc8RwcHROIAqAwAAAcfnN0BQH [...]
\ No newline at end of file
diff --git a/api/search.index/0d150af95a58.js b/api/search.index/0d150af95a58.js
deleted file mode 100644
index 84be824d4..000000000
--- a/api/search.index/0d150af95a58.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBSAAAGDR1k/BwFAFQAAAYOHWT/HPOEAnB0BQBRAAAGCh1k8RwFAFgAAAYTHWQJHQUAUgAABhEdZAIdBQBPAAAGDB1k9xzzhwJjcAUASQAABvkcZMocE4QDoMAAABzYoIAAABy3ZnBzGwKhQAAAHPZmbAUAWgAABhIdZAQd+wJhZacZAMkm0q/v8tigwAAAHFigwAAAHFmgMAAAF8kAC4QdATMbAAAlAUAAAB6UHJUcM1sTIRfIF5IZZnclFtUc1hxFAEEAABRSHFMcbScYKBgpGBscHBwFAEUAAAQUHGXPGRsCoCAAABpldXkzA4SwIBdGAAGgQAAAGmYCAQM6MAAAAQAAAAAACwAQAAAAzBBOFk8WMBcxF4AYCBsmGz4bPxtMHLccKwKgAAAADjBwcrUBQgAAB90YBnIcYXYRGBIYxxjIGI0ZjhmyGrMa7hvvG5gcmRwBggErOkCIk4JuBQLBAABiBxcIFwkXChc [...]
\ No newline at end of file
diff --git a/api/search.index/0dc42a024851.js b/api/search.index/0dc42a024851.js
new file mode 100644
index 000000000..1239f8e07
--- /dev/null
+++ b/api/search.index/0dc42a024851.js
@@ -0,0 +1 @@
+rn_("FQFDAAAFQxsGDx10d2wbMhwFAUMAAAYVGwYWG2JvlxYbAqDgAAAcamFjKwKwMBINB/5hZTFBAACyGbMZtBm1GQEBADswAAABAACDAAIA/gwAAK0OggDzAAJldfQCDQAA1A8BACkAAQEAOzAAAAEAAMcAAgDREAAAXRTGACsCoBAAAA5JaXWVAEEAAATCF2Y+Fz8XmxecF50XnhefF6MYsRyyHAUARAAAEK0XrhdzOxcbAqAgAAATdGJyBQBAAAAGVx1kTR37AmRyBQHAAAA3LBktGS8bdxsLFBtucjetAIygkAAAGQ2xQB0oAAGgYAAAHRahEAAAHOczciQn3p9xuQc7MAAAAQAAygAEAPIIAQCoCgAAqAvGAKsOAAA=")
\ No newline at end of file
diff --git a/api/search.index/0df01de88cc2.js b/api/search.index/0df01de88cc2.js
new file mode 100644
index 000000000..5113f3e1a
--- /dev/null
+++ b/api/search.index/0df01de88cc2.js
@@ -0,0 +1 @@
+rn_("BQHAAAA1FhyPHPcc+BwMAB1hafMEAWb0HBgAAOsD2wAnADFGAAAeGaYapxqoHPOBAnB2FQBBAAAEXhxmLh0vHbUAQgAABH8cZtIR0xHUEdURyxjMGOAa4RriGuMaMh0zHfsDYW9y")
\ No newline at end of file
diff --git a/api/search.index/0ed024228ffc.js b/api/search.index/0ed024228ffc.js
deleted file mode 100644
index 1758412a7..000000000
--- a/api/search.index/0ed024228ffc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHCAAAS+hf7FxL8F/0Xc3kFAEUAAAbXHGJqHBUAQQAABB0cZuoc6xwVAEIAAAQ+HGbuHO8c+wJhbyFFAAC2GQkbChvTAoSwMBsWAAEAqBDz6RgAAHYB0AEFAEsAAAYSHWQEHbuEoLAAABwEAUEB")
\ No newline at end of file
diff --git a/api/search.index/0f26cb0911a8.js b/api/search.index/0f26cb0911a8.js
new file mode 100644
index 000000000..06b6f13c8
--- /dev/null
+++ b/api/search.index/0f26cb0911a8.js
@@ -0,0 +1 @@
+rn_("BQBKAAAGtBx22hwFAEUAAAxFHWF6HCOBAqCgAAAcimFzJQBAAAATxhfHF2kJGAoY+RhBQgAA7hDvEIQWRRvwHAUDQAAAUr4YvxjAGMEYwhjDGDOiFrEXshf1HAawGFQVGhYaFxoYGhkaGhprcHJ2KBwFAcIAAAb1HADFF21zGwKggAAAHAFhabUBQQAAFAIcAxwAgxZtc14ODxIQEhESEhITEhQSChkLGbca5BrlGgUBwAAABQsYEsMXxBd1eecvAMugwAAAHUWwYBgMAwugAAAADkfAQKg7OzAAAAEAACsADgDJCgIAtQwWAMoQAwCUEwEA6xcAAMkYAQAJGgEANRsAAGcbAADsGwAAehwAAIocAACZHAAA8hwAAA==")
\ No newline at end of file
diff --git a/api/search.index/0fca9f26b6f3.js b/api/search.index/0fca9f26b6f3.js
new file mode 100644
index 000000000..2baf60d6c
--- /dev/null
+++ b/api/search.index/0fca9f26b6f3.js
@@ -0,0 +1 @@
+rn_("FQBIAAAT6BzpHGzGGccZMUIAALYXtxe4F7kXBQHAAAAH+xwBUBxhbwUBxAAAAjIdAS4dYW8jhQKgAAAAHMZkZgUBxAAABiMdAxMdb3QbAqDgAAAdPmhvNwGEh6AwAAAcc6GAAAAdU6BAAAAcsaBQAAAcxyyIA1sDoNAAAB0/bG11BQHEAAAGJB0DFB1vdO8AhaDAAAAbcaCwAAAbNYFACQ==")
\ No newline at end of file
diff --git a/api/search.index/101cbb6bc4a0.js b/api/search.index/101cbb6bc4a0.js
deleted file mode 100644
index eb0124d98..000000000
--- a/api/search.index/101cbb6bc4a0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHuRwBEBxhbwUBxAAAAu8cAescYW8jhQKgAAAAHIZkZgUBxAAABuAcA9Ecb3QbAqDgAAAc+2hvNwGGh6AwAAAcM6GAAAAdEKBAAAAccKBQAAAchyyIAwUBwAAAB7gcAQ8cYW8FAcQAAALuHAHqHGFvI4UCoAAAAByEZGYFAcQAAAbfHAPQHG90GwKg4AAAHPpobzcBhoegMAAAHDKhgAAAHQ+gQAAAHG+gUAAAHIUsiAM7A6CQAAAbO2NmcA==")
\ No newline at end of file
diff --git a/api/search.index/10570474cb35.js b/api/search.index/10570474cb35.js
new file mode 100644
index 000000000..f9718834f
--- /dev/null
+++ b/api/search.index/10570474cb35.js
@@ -0,0 +1 @@
+rn_("BQHAAAACpxgCpRhidBsCoCAAABzQYXkjAAKgwAAAHC5ldDswAAABAAAcAAkAhQwHAN4QAADrEQEAzhcGACQYAACUGgYAMRsAAHIcAADTHAAA")
\ No newline at end of file
diff --git a/api/search.index/105d96156234.js b/api/search.index/105d96156234.js
deleted file mode 100644
index 852c234d0..000000000
--- a/api/search.index/105d96156234.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHBAAAILRsDBBthdDFAAAB2CtQQ3xChGQUAUgAABg0dZPwcBQBUAAAGDh1k/xzzhAJwdAUAUQAABgodZPEcBQBYAAAGEx1kCR0FAFIAAAYRHWQCHQUATwAABgwdZPcc84cCY3AFAEkAAAb5HGTKHBOEA6DAAAAc2KCAAAAct2ZwcxsCoUAAABz2ZmwFAFoAAAYSHWQEHfsCYWWnGQDJJtKv7/LYoMAAABxYoMAAABxZoDAAABfJAAuEHQEzGwAABQHBAAAE4RwF7Bxxc/MCAXI7MAAAAQAAIgANADwWDQDUFwMAchgAAMAYAQDiGAAAqhkAAMQZAwDVGQAAZxoBAMUaAQA7GwAAFxwAAGYcAAD7Aml5BQBEAAAQqherF3MmFwUBwQAAErgQyxEBhhppb/sDYWJ0FQBGAAAWDRwOHGZvGHAYIwECoFAAABuvbHMBYBwAABMAAqBwAAAc8GFw8ooKAABdDAECADswAAA [...]
\ No newline at end of file
diff --git a/api/search.index/108d85c44aa2.js b/api/search.index/108d85c44aa2.js
deleted file mode 100644
index b4296f979..000000000
--- a/api/search.index/108d85c44aa2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQBDAAAO1BxjDxgQGEYaIUEAAOgW6RZ9GW8AhaBAAAAYmqBwAAAbM7AgGk0B7QGhBAUBwAAAL8sc2hzbHCfNG0YcRxxhciMDA6AQAAAb37BQHCkAYWVwcwFtFgAA+wJheQ==")
\ No newline at end of file
diff --git a/api/search.index/10934e490a18.js b/api/search.index/10934e490a18.js
new file mode 100644
index 000000000..3f4e49a7a
--- /dev/null
+++ b/api/search.index/10934e490a18.js
@@ -0,0 +1 @@
+rn_("FQBDAAAUYhy6HHV3FxUZFQBDAAAE1xpmEx0UHRUARgAABB8cZiMdJB1TgQOgAAAADSNvc3TzAAJnb/RWDgAAlAO0BAMB")
\ No newline at end of file
diff --git a/api/search.index/10b4214267ad.js b/api/search.index/10b4214267ad.js
new file mode 100644
index 000000000..568bfa9f5
--- /dev/null
+++ b/api/search.index/10b4214267ad.js
@@ -0,0 +1 @@
+rn_("AQYAOzAAAAEAAB4AAQBvGB4ABQBBAAAGTx1kOB0TggKgQAAAHRVtbwEAAaBgAAAdUWQ6MAAAAQAAAAAAFAAQAAAAyAjJCKwO3BEHGR0ajBpMG00bThtPG1AbURtSG1kcWhx7HNEc3RwSHUAdSwOwIAznADGgUAAAGbticnN7hKDwAAAcaRBBAQ==")
\ No newline at end of file
diff --git a/api/search.index/1116fdf0ca4c.js b/api/search.index/1116fdf0ca4c.js
deleted file mode 100644
index 903e5a40c..000000000
--- a/api/search.index/1116fdf0ca4c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBCAAAA3xBzKQ7eEDFBAACxDLIMaRh2GgUBwAAAEnoYWhwZYxztHGlvEwADsDAZngL0sDAZnwABZmlwOjAAAAEAAAAAAA4AEAAAAFAW2BfZF8IYyBnJGccazxr0GzYcNxx8HIgciRy/HCODAqAwAAAYxWZzFQBBAAAglRmWGUIbc/UaFRwFAEQAAAefHHB4FvMAAXQB9xYAAPsDY29zBQBDAAADCxxpghojAwKgcAAAHMZwdPTGFwAA4gABAAEA+4QBAUg=")
\ No newline at end of file
diff --git a/api/search.index/113c7894d3b9.js b/api/search.index/113c7894d3b9.js
deleted file mode 100644
index 303cd6002..000000000
--- a/api/search.index/113c7894d3b9.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHEAAAR1BtNHAV0HGVyEwUCoCAAABnQYnL2OBcAAAEApgABADMAtgABAQOgQAAAGAuwYBvuAAGAF4c0QAFmcHM7MAAAAQAAEAAGAHIXAACMGQAA0RkBALEaAAD6GgUARRsFAPMAAm509JwaAAABAAEAAQA=")
\ No newline at end of file
diff --git a/api/search.index/1195b6467bae.js b/api/search.index/1195b6467bae.js
deleted file mode 100644
index 0676606e6..000000000
--- a/api/search.index/1195b6467bae.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAJJBtziQxFAEQAAAcuG2xtHJ0coRyzHLoccUAAAMQQxRBMFnYX6BjQGQYbrRxRQAAATxPyFvMW9Bb1FvYW8wCEqCAA9QMNAAABAAEAAQABAA==")
\ No newline at end of file
diff --git a/api/search.index/11b9b683186c.js b/api/search.index/11b9b683186c.js
new file mode 100644
index 000000000..8e9eb8fb4
--- /dev/null
+++ b/api/search.index/11b9b683186c.js
@@ -0,0 +1 @@
+rn_("BQHAAAAV3hjfGAh4G2xuAYIDoVAAAB1MoCAAABxSoIAAABz9ZHV3KwKgIAAAHMRvckMEA6BgAAAbLrBwHMUADWJlcAGmFgAAUUIAAOAY4RjyG/MbABzBHPsCY3T7AmFv")
\ No newline at end of file
diff --git a/api/search.index/11dc1591ed92.js b/api/search.index/11dc1591ed92.js
deleted file mode 100644
index a4ddf97bb..000000000
--- a/api/search.index/11dc1591ed92.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAA11RtOHLQctRwMvRxhaRMAAqAwAAAbNGZsOjAAAAEAAAAAAAgAEAAAAOIXdBjTGDobxhswHFYcnxzGHPMAAXIB6RoAAA==")
\ No newline at end of file
diff --git a/api/search.index/11ebbbe58b7d.js b/api/search.index/11ebbbe58b7d.js
deleted file mode 100644
index 2d0e956d6..000000000
--- a/api/search.index/11ebbbe58b7d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("4UYAAHsYfBjKG/wb/Rv+G/8bABwBHAIcAxwJHA0cDhx7HAUASAAAALobc44aKwKwQBfbAAFvcjMCA6BgAAAcYGNmb/faDAAAAQB2AHQKowAHAAEA")
\ No newline at end of file
diff --git a/api/search.index/1218916cc34f.js b/api/search.index/1218916cc34f.js
new file mode 100644
index 000000000..f114fedb5
--- /dev/null
+++ b/api/search.index/1218916cc34f.js
@@ -0,0 +1 @@
+rn_("BQBGAAAFvxxyDRsxRwAAzhprHGwczhzzAAJmbDswAAABAAAHAAIA+hAAAKMSBgATgQKwcBylAIxtcwUBwAAAELYYnBwb1hzXHGV0BQHAAAAR/hFeHAdmG2xz+wJlbK8AhbAwFpUAAaCgAAAajqBgAAAc1QFJAQ==")
\ No newline at end of file
diff --git a/api/search.index/1230d89075f0.js b/api/search.index/1230d89075f0.js
deleted file mode 100644
index 8398cc4ae..000000000
--- a/api/search.index/1230d89075f0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBGAAAFfRxyzhoxRwAAjxoqHCscjBz1AEYAAAnTHHLAF5sYnBidGJ4YnxigGKEYkRrXG9gb2RvaG08cUBxYHAUBwAAAAa8QAnkaZXljAAOwYBwEAPVkdHb36hYAAAEAAQB3AYgB3wIsAAUASwAAGNUc1hx3txv7Amx0cwCEoDAAABNLIUgAOzAAAAEAAAcAAgDQEAAAcxIGAA==")
\ No newline at end of file
diff --git a/api/search.index/1273c961f89e.js b/api/search.index/1273c961f89e.js
deleted file mode 100644
index 546773605..000000000
--- a/api/search.index/1273c961f89e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQFAAABh5xfoF+kXyhlzGoUa/RwVkhoMHGlzyRrKGtIbBRwrAqCwAAAcxHR5RwAAhaBgAAAWfaCQAAAcL6BgAAAc/bBQGuEAARwQAvLWBwAAZA8=")
\ No newline at end of file
diff --git a/api/search.index/12a516ba5383.js b/api/search.index/12a516ba5383.js
new file mode 100644
index 000000000..354d190f8
--- /dev/null
+++ b/api/search.index/12a516ba5383.js
@@ -0,0 +1 @@
+rn_("BQHEAAARIBfjHAR1G2l0JwAAx6AwAAAR97CAGc0AAbBAFz4AAaDQAAAcMbAgGogANaBgAAAbEoAEoA30zQcAABoJzgU4AQUBwAAAC/QbBNQQbnQVAEgAAAZJHWS3HCsdI4ECsFAY4gABZnQFAcAAAAVbHDQNGCEZ7hnAGmNz8wABZfM1BAAA8wABAAUBwgAADF8cAlMWZHMFAEIAAAGRE2WxCvsDZWlyAQAAOzAAAAEAABcABQCFDAcAzhcGAJQaBgAxGwAAchwAAAUAQAAABCccY1kb8wMBcwHSGgAAEwICoIAAABvrZnIBUA4AAPMCAmlzAVoOAAABAAOgQAAAGoyg0AAAG3GxABxrAAFiY3Tz3QgAAJUBAQAFAcIAAABYDQb4F2Vp+wJjZEcfAImg4AAAGrqgYAAAHVWgUAAAENM5gQc6MAAAAQAAAAAADgAQAAAAXAHgCHYKdwqpDNgMRw45GDoYOxg8GD0YPhiPGkYd")
\ No newline at end of file
diff --git a/api/search.index/134f756c5510.js b/api/search.index/134f756c5510.js
new file mode 100644
index 000000000..4ef2f9623
--- /dev/null
+++ b/api/search.index/134f756c5510.js
@@ -0,0 +1 @@
+rn_("FQBIAAAEoBxlMhszGyOCA7BgGb0Cf6BAAAAYo2RpcvMAAWk7MAAAAQAASgEEACIGxQDwBwAA9RcAAC4ZggAFAcAAABceG1gbAxobZXAVAEsAAASgHGUyGzMb8wEBaTswAAABAACDAAIA9RcAAC4ZggAVAEAAAAUpG3e0F7UX+wJnaQUARQAABkscYqYYBQHBAAACpxgCpRhidPMAAXT03hAAAA0BAQA4BkUBQgAAJPIb8xvBHAUnG2N3eRd6F1kYWhhgGysCoEAAABnIZWkFAUQAAA9CHRL6GfsZY3L8FwUBwAAAI+AY4RgAHAl4G2FvtwwDiLAwF3gEiaBwAAAZ/KAwAAAYWzSYEvVYDgAAAQAwAP4I0QC1AUAAABQKHQsdAEUdbXOOFo8WHxggGN4Y3xjjGekZ7xpGG4wc6hz7hShgBA==")
\ No newline at end of file
diff --git a/api/search.index/13c54ca42061.js b/api/search.index/13c54ca42061.js
new file mode 100644
index 000000000..0c4ae16ac
--- /dev/null
+++ b/api/search.index/13c54ca42061.js
@@ -0,0 +1 @@
+rn_("IUEAAA4chxyIHAUBwAAAEHIWohgBcxZkbwGBAqDQAAAc8KEwAAAdImFwpwEChqBQAAAY77BwGwIAAaDAAAAchjRBEPVsDQAAAQB5ChwB9QAbArAgGG4ElWVz")
\ No newline at end of file
diff --git a/api/search.index/145e29a1b739.js b/api/search.index/145e29a1b739.js
new file mode 100644
index 000000000..ef758d254
--- /dev/null
+++ b/api/search.index/145e29a1b739.js
@@ -0,0 +1 @@
+rn_("cUAAAGYWvxnAGcEZwhnDGcQZxRkFAcEAAARuHBXDGkkccXMFAcsAAAQlHQUwHXFzYUUAAJQalRqWGpcamBqZGpoaJwcAh6DAAAAccrBAGKgAAaBwAAAawhGhAzswAAABAAAkAAgA3xABAO0RAwBRGAYAzRgGACAaBgCqGgYA2BoAAOYaAQAbA6FAAAAdB6AgAAAYkmVoaQ==")
\ No newline at end of file
diff --git a/api/search.index/14a4b0e0a7a7.js b/api/search.index/14a4b0e0a7a7.js
deleted file mode 100644
index fce34e027..000000000
--- a/api/search.index/14a4b0e0a7a7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUkAAAAbARsCGwMbBQBCAAAGER1kAh3zAAFtAZ0QAAAFAcAAABF+GH8YCNMcZW9xQQAAVhZXFuUX5hemGawZBxtLHAUASgAABgodZPEcZwMBhqAwAAAYVKAgAAAYfYIJAzowAAABAAAAAAAdABAAAACBFoMWrxewF8AXXRheGJsYnBidGJ4YnxigGKEYeRmRGtMaJRu5G9cb2BvZG9obEhwTHCQcTxxQHFgcnhwFAEIAAAIDHW34HCOHAqCAAAAdB2FrIwsCoKAAABz9YWMBShwAADuEoCAAABpmoIAAAByPCECEUwADsHAclAABaXB0Ae8WAAA=")
\ No newline at end of file
diff --git a/api/search.index/14a6ad38caf0.js b/api/search.index/14a6ad38caf0.js
deleted file mode 100644
index d8ca4a128..000000000
--- a/api/search.index/14a6ad38caf0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHuBwBDxxhbwUBxAAAAu4cAeocYW8jhQKgAAAAHIRkZgUBxAAABt8cA9Acb3QbAqDgAAAc+mhvNwGDh6AwAAAcMqGAAAAdD6BAAAAcb6BQAAAchSyIAw==")
\ No newline at end of file
diff --git a/api/search.index/14bc8c3658c3.js b/api/search.index/14bc8c3658c3.js
new file mode 100644
index 000000000..f7b1659ce
--- /dev/null
+++ b/api/search.index/14bc8c3658c3.js
@@ -0,0 +1 @@
+rn_("BQBBAAAJYxtzqAxFAEQAAAdtG2yvHOAc5Bz2HP0ccUAAAO4Q7xCEFrAXJBkNGkUb8BxRQAAAgRMsFy0XLhcvFzAX8wCEqCAA9SQNAAABAAEAAQABAA==")
\ No newline at end of file
diff --git a/api/search.index/15cd646f0157.js b/api/search.index/15cd646f0157.js
new file mode 100644
index 000000000..96a64bed2
--- /dev/null
+++ b/api/search.index/15cd646f0157.js
@@ -0,0 +1 @@
+rn_("FQBCAAAACRFzTQ4IETFBAADRDNIMpRi1GgUBwAAAErYYnBwZpRwxHWlvEwADsDAZ2wL5sDAZ3AABZmlwOjAAAAEAAAAAAA4AEAAAAIgWEhgTGP4YBRoGGgYbDhs1HHcceBy+HMocyxwCHSODAqAwAAAZAWZzFQBBAAAg0hnTGYEbczQbVhwFAEQAAAfiHHCwFvMAAXQBMRcAAPsDY29zBQBDAAADTBxpwRojAwKgcAAAHQlwdPQAGAAA5AABAAEA+4QBAUg=")
\ No newline at end of file
diff --git a/api/search.index/15e539413daa.js b/api/search.index/15e539413daa.js
deleted file mode 100644
index fe3fa3b4c..000000000
--- a/api/search.index/15e539413daa.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQBCAAAWBR0GHWR1HHYc5xzoHAUBwQAAAVQXAvkXYXUrA6BQAAAWZ6BAAAAWYWJzdrUBQAAAFMEbwhsASxZtczoO4RHiEeMR5BHlEeYRzhjPGHgapRqmGt8AxaAgAAAa66CQAAAXxwACCgo=")
\ No newline at end of file
diff --git a/api/search.index/165936476211.js b/api/search.index/165936476211.js
new file mode 100644
index 000000000..dc793b9e4
--- /dev/null
+++ b/api/search.index/165936476211.js
@@ -0,0 +1 @@
+rn_("BQBAAAADBRxq+xslAEMAABHDHN4cZbQa6BzpHBUARAAABKAcZTIbMxsFAcYAAAcdHQUDHWZ0+wJhZhMBAoATigAT42RyOzAAAAEAAHEBBgDxEAIAFRJhAJoWAQDEFloALRpXAJMbVwArAqAQAAAbWmR6BQBGAAAGVx1kTR3zAQFhAVQNAAAbAqAAAAAQ5WNxYUIAAEEXQhdDF0QXRRdGF0cX1wkAiLBgGb0Cf6AgAAATh6BAAAAYoxxJA/WoFQAASgLUAQEABgEbArAAFpACRmxz")
\ No newline at end of file
diff --git a/api/search.index/16e00d5f8b66.js b/api/search.index/16e00d5f8b66.js
new file mode 100644
index 000000000..67467fc65
--- /dev/null
+++ b/api/search.index/16e00d5f8b66.js
@@ -0,0 +1 @@
+rn_("MUkAANsa3BrdGt4aMUMAAJAbkRt2HJUc8wACbHU6MAAAAQAAAAAAEQAQAAAAcgxzDHQMdQx2DHcMeAx5DHoMXA7bEOMQmBYVGBYYrxjFGN8cRQBCAAAAHRxzrRjQGYIbgxtXHDsDoCAAABZwZWdsBQHAAAADKhsKIR1pbjuEoEAAABxtoVAAAB0WAUkA")
\ No newline at end of file
diff --git a/api/search.index/170e97b776f5.js b/api/search.index/170e97b776f5.js
new file mode 100644
index 000000000..b5024d425
--- /dev/null
+++ b/api/search.index/170e97b776f5.js
@@ -0,0 +1 @@
+rn_("8UYAALcYuBgLHD0cPhw/HEAcQRxCHEMcRBxKHE4cTxy9HBcdBQBIAAAA+xtzzRorArBAGBUAAW9yMwEDoGAAAByiY2ZvOjAAAAEAAAAAAAcAEAAAAPsM/AxzDf8XpBirGKwYmBw=")
\ No newline at end of file
diff --git a/api/search.index/171c388e81b3.js b/api/search.index/171c388e81b3.js
deleted file mode 100644
index 6c46bf9f8..000000000
--- a/api/search.index/171c388e81b3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQEBoHAAABnUZjswAAABAABIAAkAtAoCALMMAQA9DgAAVBIeADAYAAAzGB4AoxkBAKAaAAAnHAAARQBBAAAG8xxkNA01DXQZBRu2HAUBwAAAAH4cB8YYc3R7hKEgAAAcrxSgAA==")
\ No newline at end of file
diff --git a/api/search.index/1727a3ea489f.js b/api/search.index/1727a3ea489f.js
deleted file mode 100644
index e131c5423..000000000
--- a/api/search.index/1727a3ea489f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQBFAAAWBR0GHWR1HHYc5xzoHAEGADswAAABAAAeAAEAMxgeAAUAQQAABgsdZPQcE4ICoEAAABzSbW/7AmlvBQBFAAAGyhtmxRcFAEIAAAYKHWTxHPsCaXQFAcEAABC9Gb4ZCeQYZnN1AUIAAAGpGgTlG2lzmBiZGK8ZsBn3GjwbPRsjHAUAQgAAAgMdbfgcI4cCoIAAAB0HYWtjAgOgoAAAHP1hY2sBShwAABUAQgAABz8cbTUXDBgjgQKgMAAAGX1ia/OBAmVpAYMCoNAAABzNoQAAABzcY3AFAEgAAAfCHHMsG/MCAmZ381YNAAABAAEAFQBEAAAGDh1kwRz/HAEDAaAwAAAYMmo7MAAAAQAAxAACAN8MAADZD8MAAQOEoEAAABjLoHAAABjjoDAAABgxoJAAABqQAgMCOzAAAAEAAM8AAgDeDAAACg/OAAUBwAAABnMcDf4cbG4VAUUAAAbJGwhtHGJ3wxfEF/s [...]
\ No newline at end of file
diff --git a/api/search.index/186b97047176.js b/api/search.index/186b97047176.js
new file mode 100644
index 000000000..427be60ca
--- /dev/null
+++ b/api/search.index/186b97047176.js
@@ -0,0 +1 @@
+rn_("BQBAAAASBRgfGXJrDUUCQQAAFcYYxxgaWRxaHDOPF5AXERl4G29zdCkNKg0rDSwNiRpvAIWgsAAAHNOgIAAAHNOwEBa1AThAICM=")
\ No newline at end of file
diff --git a/api/search.index/18df185acbde.js b/api/search.index/18df185acbde.js
deleted file mode 100644
index 59f9f19ab..000000000
--- a/api/search.index/18df185acbde.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUkAAJwanRqeGp8aMUMAAFEbUhs1HFQc8wACbHU6MAAAAQAAAAAAEQAQAAAAVQxWDFcMWAxZDFoMWwxcDF0MOA6xELkQYBbbF9wXcxiJGJwc")
\ No newline at end of file
diff --git a/api/search.index/19554a51f113.js b/api/search.index/19554a51f113.js
new file mode 100644
index 000000000..532e6648c
--- /dev/null
+++ b/api/search.index/19554a51f113.js
@@ -0,0 +1 @@
+rn_("1QBCAAADoRht/BD9EBwbHRsrGywbAhwDHJMclBytHK4cCh0LHRUBRQAAA2AbACQYbHOHF1gY+wJudBsDoKAAABxfoAAAABm+YWVz")
\ No newline at end of file
diff --git a/api/search.index/1987a447d815.js b/api/search.index/1987a447d815.js
new file mode 100644
index 000000000..b9dc10618
--- /dev/null
+++ b/api/search.index/1987a447d815.js
@@ -0,0 +1 @@
+rn_("RQBAAAAWSR1KHWS3HLgcFR0rHSwdFQBKAAAGSh1kuBwsHQUBwQAAB1gbAxobZXDzgQJpcgUARAAAAWEcaVcb8wYBZvOgFwAAeAHkABUASwAABkkdZLccKx0rAqCQAAAcb3B4+4QRAQI=")
\ No newline at end of file
diff --git a/api/search.index/19c436706e4e.js b/api/search.index/19c436706e4e.js
deleted file mode 100644
index 407722d8f..000000000
--- a/api/search.index/19c436706e4e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBCAAAA3xBzKQ7eEPUARgAACdMccsAXmxicGJ0YnhifGKAYoRiRGtcb2BvZG9obTxxQHFgcMUAAALEMsgxpGHYaAQABoRAAABzMdPK4CAAA0gBbA6DAAAAa4G1ycwUBwAAAAa8QAnkaZXkFAEUAAAwBHWE5HPFAAAAxDjsXPBe8GXsafBqAGoYaIhsjGzcbaBxpHG4cqxysHGsDoKAAABxJYXJzMUgAAIAaIhsjG2kcJwABhbBAGOYAAaBQAAAceoAZlQARrKBAAAAckVAABzswAAABAAAlABIAXA4IALgQAADLEQAAcRYDAOUWAABKFwAAjxcBAN0XAQClGQAAwBkAAKsaAQC0GgUA9RoAABUbAAAuGwEArBsAABUcAABiHAAABQHAAAACUBoETxpkZwUARAAAB58ccHgW8wABdAH3FgAABQBCAAADIBt3cBX/AIUg41drCcEGYAIBAAKgQAAAHD6goAAAG9Fmczo [...]
\ No newline at end of file
diff --git a/api/search.index/19cf20d37b1b.js b/api/search.index/19cf20d37b1b.js
new file mode 100644
index 000000000..40cc13d4d
--- /dev/null
+++ b/api/search.index/19cf20d37b1b.js
@@ -0,0 +1 @@
+rn_("BQBEAAAK2xx37BcFAEQAAAraHHfrF/sCY3QxQQAARg4MGBcbtBwFAcAAAAgaGSHEGP8bGB1vdmFBAADGF8cX2xmlGiYcNBzUHPuEEEEC")
\ No newline at end of file
diff --git a/api/search.index/1ab916b633b2.js b/api/search.index/1ab916b633b2.js
new file mode 100644
index 000000000..e955612c8
--- /dev/null
+++ b/api/search.index/1ab916b633b2.js
@@ -0,0 +1 @@
+rn_("AQEAOzAAAAEAAMUAAQCXE8UAMUIAACwZLRkvG3cbBQBSAAAGVR1kRh0FAE8AAAZQHWQ7HfMGAmNw9agXAAABAAEAAQDVBBUAQAAAAEcdNTYYNxj7hBhACA==")
\ No newline at end of file
diff --git a/api/search.index/1b240f6c919c.js b/api/search.index/1b240f6c919c.js
new file mode 100644
index 000000000..89a304bf5
--- /dev/null
+++ b/api/search.index/1b240f6c919c.js
@@ -0,0 +1 @@
+rn_("AQUAOzAAAAEAAKMAAgB7EwEAsRWhABUAQwAAIMEXChsLG3MOGg8aFQBAAAAEexxiog6jDvOBAmRt+wJydhUARQAABgwcYgQY5xhDAAOgQAAAF3ygcAAAGRhlbXcB+AwAAFFBAAAYGxkbLRsPHG4cJR3VAEcAAAQ2HWbUGdUZ1hnXGdgZ2RnaGfUbKRwuHDEc5RxTHVQdGwKgYAAAG1pjdPsDbnN0MUEAAGwOsxdiHLocIUIAAJgXmReaFxUARQAABd8cY4EcghwFAEkAAAYbHWKsHFOFA6AAAAAZFGZzd/OCAmRp84ECaXT7A2FlaQ==")
\ No newline at end of file
diff --git a/api/search.index/1b35729b0be3.js b/api/search.index/1b35729b0be3.js
deleted file mode 100644
index 781740dbf..000000000
--- a/api/search.index/1b35729b0be3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQJGAAAh5RfmF6YZAn0YEn4YfxhpbHKBFq8XsBddGF4YEhwTHBUATQAAAEIbc/UaFRwFAFEAAAYKHWTxHAUAWAAABhMdZAkd84cCcnYVAUcAABZBGyUcAugYYnJLF1UYzwXHsHAXSgPLoMAAABqRsFATYAABAAmkDAUBwQAABOEcBewccXNDAAOgYAAAHPOgYAAAGydkb3I7MAAAAQAAJwARADQNAQA8Fg0A1BcDAHIYAADAGAEA4hgAAHQZAACqGQAAxBkDANUZAABnGgEAxRoBAAUbAAA7GwAAFxwAAGYcAAC2HAAANQFAAAAX7BuaHADvFmZzIRYiFiMWJBY1AkEAABHaEFoYBbkXFfgX1BppcnOTCpQKKBcpF/UAQAAABTcXdZkKbgxvDHAMcQxyDHMMdAx1DHYMdwwqFysX+RoMG9wbMUMAANoY5xrIGy4cBQHBAAAFDBsG5xtmbjUAQAAABIcccMMaxBrsG5o [...]
\ No newline at end of file
diff --git a/api/search.index/1b3f616e85f6.js b/api/search.index/1b3f616e85f6.js
deleted file mode 100644
index 74e273f8e..000000000
--- a/api/search.index/1b3f616e85f6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUgAAJ0coRyzHLocMUIAAMUb0xsHHBEcZQBDAAAIAB1icxV0FXUVdhV3FXgVeRUbA6DQAAAc5qAwAAAa12FoaUFAAABnCmgKIBZZFloWYUgAAJEYkhiTGJQYlRiWGJcYBQBSAAAGDR1k/BwFAFQAAAYOHWT/HPOEAnB0BQBRAAAGCh1k8RwFAFgAAAYTHWQJHQUAUgAABhEdZAIdBQBPAAAGDB1k9xzzhwJjcAUASQAABvkcZMocE4QDoMAAABzYoIAAABy3ZnBzGwKhQAAAHPZmbAUAWgAABhIdZAQd+wJhZacZAMkm0q/v8tigwAAAHFigwAAAHFmgMAAAF8kAC4QdATMbAAAFAcEAAAThHAXsHHFz8wIBcjswAAABAAAiAA0APBYNANQXAwByGAAAwBgBAOIYAACqGQAAxBkDANUZAABnGgEAxRoBADsbAAAXHAAAZhwAAPOBAml5KwKgkAAAHPBucgUASwAABhM [...]
\ No newline at end of file
diff --git a/api/search.index/1b7f56d4368e.js b/api/search.index/1b7f56d4368e.js
deleted file mode 100644
index fdc772d32..000000000
--- a/api/search.index/1b7f56d4368e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUkAAJwanRqeGp8aMUMAAFEbUhs1HFQc8wACbHU6MAAAAQAAAAAAEQAQAAAAVQxWDFcMWAxZDFoMWwxcDF0MOA6xELkQYBbbF9wXcxiJGJwcRQBCAAAA3BtzcRiTGUMbRBsWHDsDoCAAABY4ZWdsBQHAAAAD6xoK3RxpbjuEoEAAABwsoVAAABzTAUkA")
\ No newline at end of file
diff --git a/api/search.index/1bc32022e9cb.js b/api/search.index/1bc32022e9cb.js
new file mode 100644
index 000000000..1120647fb
--- /dev/null
+++ b/api/search.index/1bc32022e9cb.js
@@ -0,0 +1 @@
+rn_("BQHDAAAAAxEhsBzuHO8cZW9hQQAAQRdCF0MXRBdFF0YXRxcFAsMAAAj/HAIUHAjkHGJ1dyMFAqBgAAAazGJwAYwTAAD7A2FtdQ==")
\ No newline at end of file
diff --git a/api/search.index/1bc832d6bb6d.js b/api/search.index/1bc832d6bb6d.js
new file mode 100644
index 000000000..06d109a4c
--- /dev/null
+++ b/api/search.index/1bc832d6bb6d.js
@@ -0,0 +1 @@
+rn_("BQFAAAAGuxwB7xszcV8cBQHAAAACJBsU9BeDHGlvBQHBAAAMbRwDxRhtboFGAACdGJ4YvhrMGiIbLhtxGwocdRw3RACMsHAcxQANoDAAABwqoCAAABvusBAZ5gMioEAAABgxKrhmH23zoDAAABwroIAAAByv1qkTOjAAAAEAAAAAABcAEAAAAOgM6QwZDRoNGw0cDR0NHg0fDSANIQ0iDYATjBOdFqEWphavF/0X/hcdGbcZuBmgGnUARQAABbwccv0Z8xr0GvUa9hr3Gvgabhs7A6AQAAATh2Nncg==")
\ No newline at end of file
diff --git a/api/search.index/1c006a4d5f71.js b/api/search.index/1c006a4d5f71.js
new file mode 100644
index 000000000..c46853691
--- /dev/null
+++ b/api/search.index/1c006a4d5f71.js
@@ -0,0 +1 @@
+rn_("AQABsAAR2gABczswAAABAAATAAkA8gwAAHEOBAAsGAEANBgBAGkYAQCOGAEAKxoBAGgbAQA4HAEAKwKg0AAAGyNociFGAABJHUodTx0FAsMAAA4qHQIGHAjgHHR1dyMFAqBgAAAavmJwAYATAAAbAqAwAAAc8mFoNwgAiLBwGfUAkqBAAAAdQaCAAAAaz7BAG/wAAaAwAAAZ8hycBDowAAABAAAAAAAQABAAAADXF9gX2RfaF9sX3BfiGOMYvhnuG/Qbtxy4HBUdKx0sHTgd")
\ No newline at end of file
diff --git a/api/search.index/1c28969e9485.js b/api/search.index/1c28969e9485.js
new file mode 100644
index 000000000..f80371840
--- /dev/null
+++ b/api/search.index/1c28969e9485.js
@@ -0,0 +1 @@
+rn_("JQBFAAAGRxxioBgpGioaBQHAAAAH1RwFwhxmdAUBwAAAFJ8YKBoGHR1vcgUARgAABAQcZRIZVwUBh7DwHSYAAbAwGMsAAaBQAAAdAyaAFjowAAABAAAAAAAHABAAAABMDgURBhEHEVwYUxs2HDccFQBCAAABYRxp7hpXG/sCZWw=")
\ No newline at end of file
diff --git a/api/search.index/1c3d8c4c061c.js b/api/search.index/1c3d8c4c061c.js
new file mode 100644
index 000000000..2073ee59b
--- /dev/null
+++ b/api/search.index/1c3d8c4c061c.js
@@ -0,0 +1 @@
+rn_("UUEAABgbGRstGw8cbhwlHdUARwAABDYdZtQZ1RnWGdcZ2BnZGdoZ9RspHC4cMRzlHFMdVB0bAqBgAAAbWmN0+wJucw==")
\ No newline at end of file
diff --git a/api/search.index/1c4745fa3ba5.js b/api/search.index/1c4745fa3ba5.js
new file mode 100644
index 000000000..ccedcd2fd
--- /dev/null
+++ b/api/search.index/1c4745fa3ba5.js
@@ -0,0 +1 @@
+rn_("BQHAAAAkwxp0G0kcAhcZcHUVAEYAABAKGwsbcw4aDxpBQgAAGBsZGy0bDxxuHPOBAmVpRQBCAAAYNhw3HGTsEAgSCRKcGMkaAQIAOzAAAAEAAMcAAgBPDgAAChHGAPMAAW07MAAAAQAAyQADAM4IAAChCccAghYAABUAQAAAJRAZHhofGndKDs0cBQBBAAARDRkOGWVSDt8LyKDgAAAczLAwHAQAUUALyAE=")
\ No newline at end of file
diff --git a/api/search.index/1c7681ecd925.js b/api/search.index/1c7681ecd925.js
deleted file mode 100644
index 84acd93ad..000000000
--- a/api/search.index/1c7681ecd925.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAU3RreGm18GfMCAWnydRgAAAEAFQBBAAAUUhxTHG0bHBwc8wcBafUIGwAANgABAA0BawAFAcQAAAF4GgqyHGlu+wNjb3A1AEMAAAGNHGk8HKMcrhzYHBOIAqAwAAAcPXN0BQHAAAAKLhwH2xphaQUBwAAABbQZBncaY2wVAEUAAAb5HGTKHPYcE4MDoMAAABxooDAAAByqZm5zZyoAi7BgGXoAAaBgAAAZtaEAAAAcabCAGqcAAaDgAAAcgqAwAAAXD+S4BzswAAABAAA/ABEAqAoHAM0MAAAPDSEAWRgAANsYAACAGQAAMBsAAPsbAAAEHAAAdBwAAHocAAB9HAAA8xwAAPkcAAAFHQEACh0EABEdAgBFAkAAAAZQGhS3EDUWGr0avhphb3agCtYMQg34FvkXJQBAAAAFcxhjOQ6ADoEOBQHBAAAA2RAhbhyrHKwcZW/7hBEIBA==")
\ No newline at end of file
diff --git a/api/search.index/1caa5c891fb0.js b/api/search.index/1caa5c891fb0.js
deleted file mode 100644
index 863e3aa7d..000000000
--- a/api/search.index/1caa5c891fb0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHFAAABoBwENhtpdNFDAACUF5UXlheXF5gXmReaF1UaVhpXGlgaWRpaGlsa+wJpdDFDAABTE1QT5BiQGgUBwAAACTcbFHoarRplcCFCAAA8Gz0bIxwFAEIAAAIDHW34HCOHAqCAAAAdB2FrYwcDoKAAABz9YWNrAUocAAA7A6BAAAAZdGNkdEcDAIawkBvkAHegUAAAGrGgAAAAHCIEqCEBzBwAAA==")
\ No newline at end of file
diff --git a/api/search.index/1cdf5ec242f8.js b/api/search.index/1cdf5ec242f8.js
deleted file mode 100644
index a91db327b..000000000
--- a/api/search.index/1cdf5ec242f8.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBCAAASUhhTGHPaERUAQAAAFJUaUBtjfxmuGvMBAXPzQA4AAAEA8g0FAcAAAAe5HAEQHGFvBQHEAAAC7xwB6xxhbyOFAqAAAAAchmRmBQHEAAAG4BwD0RxvdBsCoOAAABz7aG83AgGIoDAAABwzoYAAAB0QsEAcawABoEAAABxwoFAAAByHLJgD8kMcAACAACMChKBAAAAcXqAgAAAYbqAAAAAa+RABAzowAAABAAAAAAAIABAAAABoFmsWiBcJGCoYlBrzGvQadxz7AmVs+wJpcg==")
\ No newline at end of file
diff --git a/api/search.index/1cf7a8cb3ae4.js b/api/search.index/1cf7a8cb3ae4.js
new file mode 100644
index 000000000..3f77af53d
--- /dev/null
+++ b/api/search.index/1cf7a8cb3ae4.js
@@ -0,0 +1 @@
+rn_("FQBGAAAGNx1kRBv5HNUAQgAABDYdZtQZ1RnWGdcZ2BnZGdoZ9RspHC4cMRzlHFMdVB2TAISgMAAAF/agcAAAGfkSAQH0shkAAAEAAQABAA==")
\ No newline at end of file
diff --git a/api/search.index/1cf81c82b4a2.js b/api/search.index/1cf81c82b4a2.js
deleted file mode 100644
index 52310ee17..000000000
--- a/api/search.index/1cf81c82b4a2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBEAAAHnxxweBYFAcAAABJ6GFocGWMc7RxpbxMAA7AwGZ4C9LAwGZ8AAWZpcDowAAABAAAAAAAOABAAAABQFtgX2RfCGMgZyRnHGs8a9Bs2HDccfByIHIkcvxxjAAOgMAAAGMVmc3QB9xYAAA==")
\ No newline at end of file
diff --git a/api/search.index/1d09161d08e0.js b/api/search.index/1d09161d08e0.js
deleted file mode 100644
index ad44b41cc..000000000
--- a/api/search.index/1d09161d08e0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQBAAAAzWxMhF8gXkhl3JRbVHNYctQFCAAAH3RgGchxhdhEYEhjHGMgYjRmOGbIasxruG+8bmByZHAUBxQAAKG4cqxysHATeHGFvBQHAAAAEwhoisRiyGD0cb3kVAEoAAAYOHWTBHP8cBQHAAAACWhwJ7RxpbxMIAqAwAAAckmZp9/QbAABCAAEARQAMAAEANgAhRQAAyxzaHNscJQBAAAAD8xtpzxvQG0gcIUIAAMEZwhldHDFBAAC/GsAawRqNHAUBwAAAFcwbvhwC8ht1efMBhAIBAzowAAABAAAAAAAMABAAAADMF6wYrRiuGK8YsBhqGvga1hs8HKMcrhzYHPsCZWzzAANwdHUBNxYAABUAQQAABeoad3oXexcVAEAAABTHHMgcbbAapxz7AmRuRQBEAAAA3BtzcRiTGUMbRBsWHAUAQQAAJUAb+Rv6G3dRGuccA8mggAAAG/GgIAAAF0OgYAAAHH5ATAULOzA [...]
\ No newline at end of file
diff --git a/api/search.index/1d265b347160.js b/api/search.index/1d265b347160.js
new file mode 100644
index 000000000..0e3b30b26
--- /dev/null
+++ b/api/search.index/1d265b347160.js
@@ -0,0 +1 @@
+rn_("FQBFAAAItRxjoxotHQUBwAAAA7UYBGMcYW/zAAJ0dff0EAAAhAEBAAEAoQYBAIUBVQBAAAAFyRplrhavFrMYtBjGGscaGwKwYBrKAAFmdBsCoGAAABoLZW8BAQOgQAAAHLmwQBsrAAGgAAAAF8tmbXM7MAAAAQAAFQAHAEwXDgDVGgAAYxsAAI4bAAB5HAAADB0AAD4dAQAHDQKJoEAAABv0oDAAABj/oEAAAByboFAAABqioCAAABatoIAAAB05JwkHOjAAAAEAAAAAAAsAEAAAAF8Opw6oDqkOkxaUFogXJxr5G6UcBR0xHfMAAWj2fwoAAAEABgDRCzoAAQA=")
\ No newline at end of file
diff --git a/api/search.index/1d2958823030.js b/api/search.index/1d2958823030.js
deleted file mode 100644
index df4f81e67..000000000
--- a/api/search.index/1d2958823030.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQUCsBAbBwFEoJAAABzTaXI7MAAAAQAAEgAJAMAXAACbGAYAeRkAAJEaAADTGgAAuRsAANcbAwBPHAEAWBwAACsDoDAAABeTsJAcEgABYWVp")
\ No newline at end of file
diff --git a/api/search.index/1d40c9bac7ac.js b/api/search.index/1d40c9bac7ac.js
new file mode 100644
index 000000000..c663eb57c
--- /dev/null
+++ b/api/search.index/1d40c9bac7ac.js
@@ -0,0 +1 @@
+rn_("IUEAAA4chxyIHAUBwAAAEHIWohgBcxZkbwGBAqDQAAAc8KEwAAAdImFwpwEDhqBQAAAY77BwGwIAAaDAAAAchjRBEPVsDQAAAQB5ChwB9QA=")
\ No newline at end of file
diff --git a/api/search.index/1d55c3580a7b.js b/api/search.index/1d55c3580a7b.js
new file mode 100644
index 000000000..95adb58bc
--- /dev/null
+++ b/api/search.index/1d55c3580a7b.js
@@ -0,0 +1 @@
+rn_("BQBFAAAGCBxi+xcFAEcAABb3HPgcZgccE4MCoDAAABn4cHMbAqBwAAAbXmFlCQKhAAAAHOKgsAAAHKJhb0sDoEAAABvsoKAAABwsY3F0BQBJAAAG4Rx2XRsFAcAAAAa7HAHvGzNxBQHAAAACJBsEgxxpb0cChIagMAAAHCqgIAAAG+6gcAAAHHGgMAAAHCvAiAMjgQKgYAAAG1tjdBcPAIigkAAAG1yg8AAAHNOhQAAAHQkMkRYBYA0AACMAAqBAAAAdNmZnOjAAAAEAAAAAAA0AEAAAANQZ1RnWGdcZ2BnZGdoZ9RspHC4cMRzlHFMdVB0=")
\ No newline at end of file
diff --git a/api/search.index/1d7cdb85d1af.js b/api/search.index/1d7cdb85d1af.js
new file mode 100644
index 000000000..7f443c162
--- /dev/null
+++ b/api/search.index/1d7cdb85d1af.js
@@ -0,0 +1 @@
+rn_("BQLDAAAI/xwCFBwI5BxidXcjBgKgYAAAGsxicAGMEwAAIwAEsIAXggF+oIAAABwsoRAAABxWYmNsdvN0AQAAtQLGFw==")
\ No newline at end of file
diff --git a/api/search.index/1dfcde2862b2.js b/api/search.index/1dfcde2862b2.js
new file mode 100644
index 000000000..ac495c044
--- /dev/null
+++ b/api/search.index/1dfcde2862b2.js
@@ -0,0 +1 @@
+rn_("FQBFAAAF3xxjgRyCHAUASQAABhsdYqwco4OEoQAAAB06oAAAABkUKAASBQBJAAAGPR1kDR0ThAOgwAAAHRyggAAAHPpmcHP7AmZsBQBaAAAGVh1kSB37AmFl")
\ No newline at end of file
diff --git a/api/search.index/1e3e3e2f9fa2.js b/api/search.index/1e3e3e2f9fa2.js
deleted file mode 100644
index dd75e21b9..000000000
--- a/api/search.index/1e3e3e2f9fa2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("dQFCAAABqRoE5Rtpc5gYmRivGbAZ9xo8Gz0bIxwFAEIAAAIDHW34HCOHAqCAAAAdB2FrYwIDoKAAABz9YWNrAUocAAAVAEIAAAc/HG01FwwYI4ECoDAAABl9Ymv7AmVpBQHBAAAILRsDBBthdDFAAAB2CtQQ3xChGQEDADswAAABAADDAAEAehLDAAEAADswAAABAADEAAIAugoAAFkNwwAbAqAgAAAcC2R05wEAhqBAAAAamKBgAAAczCAhFjowAAABAAAAAAAkABAAAABABNwH3QfVDCkOMw7OENcQ2BDeEKoRXBMdFlEWUhZTFnAWDxdVF1YXzRfOF7EYshjKGNUYTxp5GoIalxoEGy0bORvxGz0c0BzRHKuEsFAZjQABoGAAABszEQAF")
\ No newline at end of file
diff --git a/api/search.index/1e52371fd34d.js b/api/search.index/1e52371fd34d.js
new file mode 100644
index 000000000..8051064f4
--- /dev/null
+++ b/api/search.index/1e52371fd34d.js
@@ -0,0 +1 @@
+rn_("BQBAAAASjRqfGmvJEFFCAABODgEYphynHNgc2RwVAFAAAAZRHWQSHUAd1QFCAAAJqBwGGRtwcpEXkheTF5QXlReWF5cX3RfeF98X4BfhF+IX4xf7AmJye4Sg8AAAHM4BQQE=")
\ No newline at end of file
diff --git a/api/search.index/1e8c048a8a01.js b/api/search.index/1e8c048a8a01.js
new file mode 100644
index 000000000..0bc6aae53
--- /dev/null
+++ b/api/search.index/1e8c048a8a01.js
@@ -0,0 +1 @@
+rn_("IUUAAPoY+xgpGwUBwAAAIKAMoQzIGQKOGmh5BQBGAAAGFx1mmBwFAEUAAAazHGLIGgUAQAAABCccY1kb8wICc3cB0hoAACsCoGAAABoRYWkVAEMAAATXGmYTHRQdFQBGAAAEHxxmIx0kHQUBwAAAFCgdKR01vxphG2IbqxxhZccCAIagwAAAHN2g8AAAHRGwAA0jDJgkYAbz5ggAACcJ/gc3BwCHoDAAAA1VoIAAABvrMAEXOzAAAAEAAFgAFQA/BAEAvwcBAM0KAgDTDAEAag0AAFAOAABbDgAAYQ4AAM4QAAAKEgAAhBIeAHoTAACiFgAAsRcBALQXAQBsGAAAbxgeAOAZAQDfGgAAaBwAAPUcAAA=")
\ No newline at end of file
diff --git a/api/search.index/1ebb2ece7b80.js b/api/search.index/1ebb2ece7b80.js
new file mode 100644
index 000000000..e77a72a21
--- /dev/null
+++ b/api/search.index/1ebb2ece7b80.js
@@ -0,0 +1 @@
+rn_("FQBNAAAENh1mUx1UHSOGA6AQAAAZvqCAAAAchW1zdAUASgAAFAodCx1t6hwVAEYAABStHK4cbYQcBh3zhgJmcEsDoDAAABOCoEAAABchZHBzFwQAh7BwGN4AAaAwAAAOS7AwEg4GiaCgAAAa76DQAAAcLiXACgE8BAAA")
\ No newline at end of file
diff --git a/api/search.index/1f046cc28ca9.js b/api/search.index/1f046cc28ca9.js
new file mode 100644
index 000000000..b995f4d72
--- /dev/null
+++ b/api/search.index/1f046cc28ca9.js
@@ -0,0 +1 @@
+rn_("VQFBAAAj3BDdEGsYAJgMZnPxEfIR8xH0EfUR9hEFAEEAACV/GzocOxx3kBoThwKgMAAAGqllc5uEoCAAABf4oIAAABiuAQgJ")
\ No newline at end of file
diff --git a/api/search.index/1f13d7f9aa71.js b/api/search.index/1f13d7f9aa71.js
deleted file mode 100644
index f20d772b3..000000000
--- a/api/search.index/1f13d7f9aa71.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("1QBCAAADZRht0hDTEN0a3hrsGu0awRvCG1IcUxxrHGwcxxzIHBUBRQAAAyEbAOoXbHNNFxwY+wJudBsDoKAAABweoAAAABmBYWVz")
\ No newline at end of file
diff --git a/api/search.index/1f31f1f90fe2.js b/api/search.index/1f31f1f90fe2.js
deleted file mode 100644
index 44cdc773a..000000000
--- a/api/search.index/1f31f1f90fe2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUEAAEgOeRchHHgcIUIAAF4XXxdgFxUARQAABZwcY0AcQRwFAEkAAAbXHGJqHFOFA6AAAAAY2GZzd/OCAmRpY4EDoIAAAByOaGl0")
\ No newline at end of file
diff --git a/api/search.index/1fa84e3de79b.js b/api/search.index/1fa84e3de79b.js
deleted file mode 100644
index 10a6e2f1a..000000000
--- a/api/search.index/1fa84e3de79b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBFAAAGyxtiyherGEMAA6BAAAAXQqBwAAAY3GVtdwHXDAAAFQBAAABQ2RraGu4azhstHOEcdM0c3BwFAcAAABWyGrMaAncaYW/VAEcAAATyHGaXGZgZmRmaGZsZnBmdGbQb6BvtG/AbohwPHRAdGwKgYAAAGxtjdAUARAAAA8gbbicXBQHAAAAFsRoWehqtGmxuBQHAAAAD3hxTrReuF1waXRq9Gr4abHUFAsMAAAjFHAIHHAizHGN1dyMEAqBgAAAa42JwAWUWAAAhRwAAbhyrHKwc+wJsdPsCYW/zAIc0oAY7MAAAAQAAEQAHANgIAAB5CgAAQBMBAJMXAADqGAUA2BkFAOkbAAA=")
\ No newline at end of file
diff --git a/api/search.index/1feda528b5b6.js b/api/search.index/1feda528b5b6.js
new file mode 100644
index 000000000..1e918f2ad
--- /dev/null
+++ b/api/search.index/1feda528b5b6.js
@@ -0,0 +1 @@
+rn_("BQBBAAAGTx1kOB0TjAKgQAAAHRVtbwUBxQAABBgbBXQbcXP7AmFvFQBJAAAEuRxmPh0/HRUASQAABjcdZEQb+RwVAEwAAAZKHWS4HCwdFQBMAAAGSR1ktxwrHfsCYWkFAcAAAAfnHCIHGAgY1hpveSMCArBgGgACHmx0OzAAAAEAAAYAAwDqEAEAAxIDAKcXAAAVAEEAABN1F/kZYdgR2RHHDwCIoIAAABxtoGAAAB1SHDEGOjAAAAEAAAAAAAoAEAAAAHoKcAyxFrIWaReSHAQdJh0nHUIdQx0=")
\ No newline at end of file
diff --git a/api/search.index/2005beed2159.js b/api/search.index/2005beed2159.js
deleted file mode 100644
index 3cb86e1a2..000000000
--- a/api/search.index/2005beed2159.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAW5BzlHGU3DnUAQAAAFFIcUxxtdQ4nGCgYKRhXGFgYGxwcHAUBxwAAB9kcBcAcZnQTBAKAE1gAE9tkcjswAAABAABpAQYAxxACAOcRXwBiFgEAjBZYAPAZVQBUG1UA24SgAAAAF7wNIAA=")
\ No newline at end of file
diff --git a/api/search.index/201c64ae16c3.js b/api/search.index/201c64ae16c3.js
deleted file mode 100644
index 4fbfb2868..000000000
--- a/api/search.index/201c64ae16c3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAADzRoA4xdhcwUBwwAAF5YclxwS9xv4G2RzUwEDoFAAABsrZm1u8n8WAACkAAUBwAAAA6IZAH4WYXMFAcAAAARpGlCdF54XnxegF6EXohdpcwUBwwAAF2QcZRwSKRsqG2Rz8wCEIDAEOjAAAAEAAAAAAAcAEAAAAM8QTxJQElESUhJTEkQc9Rw=")
\ No newline at end of file
diff --git a/api/search.index/202b7dbf02f1.js b/api/search.index/202b7dbf02f1.js
new file mode 100644
index 000000000..c283e2700
--- /dev/null
+++ b/api/search.index/202b7dbf02f1.js
@@ -0,0 +1 @@
+rn_("BQJGAAAhYxuOGwwdBi0dCDkdaXN0JxoVAEEAABQCHAMcbeQa5RoTBAKgIAAAG0VpcvfJGAAAAQA/AQEAKwEyADIBkwCEsEAYMgLhsJAcWQABFCEA88EXAABJAwEA")
\ No newline at end of file
diff --git a/api/search.index/203880d2543a.js b/api/search.index/203880d2543a.js
deleted file mode 100644
index 0ee672d35..000000000
--- a/api/search.index/203880d2543a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAVohijGAg5G2xuAYIDoVAAAB0IoCAAABwRoIAAABy6ZHV3KwKgIAAAHIJvckMEA6BgAAAa77BwHIMADWJlcAFuFgAAUUIAAKQYpRixG7Ibvxt/HPsCY3T7AmFv")
\ No newline at end of file
diff --git a/api/search.index/20e3576b09c1.js b/api/search.index/20e3576b09c1.js
deleted file mode 100644
index 8c49581a0..000000000
--- a/api/search.index/20e3576b09c1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAASehhaHBljHO0caW8TAAOwMBmeAvSwMBmfAAFmaXA6MAAAAQAAAAAADgAQAAAAUBbYF9kXwhjIGckZxxrPGvQbNhw3HHwciByJHL8cI4ICoDAAABjFZnMrAqCgAAAbJ2Z0")
\ No newline at end of file
diff --git a/api/search.index/20f57a4a7843.js b/api/search.index/20f57a4a7843.js
deleted file mode 100644
index 68b1e005d..000000000
--- a/api/search.index/20f57a4a7843.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("wUEAADEOOxc8F7wZexp8GoAahhoiGyMbNxtoHGkcFQBCAAAEkRx0uBDLEQUCwAAAFxYbFxsXqxqsGgRgGmZsdPsDZWlv")
\ No newline at end of file
diff --git a/api/search.index/2126b567f83c.js b/api/search.index/2126b567f83c.js
deleted file mode 100644
index 02fbdb01e..000000000
--- a/api/search.index/2126b567f83c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQFBAAAFqhkQWRZaFmVzPhM/EwUBwQAABDscDNwcaW/7AmVvFQBCAAAGchx2mByZHCOCA6BAAAAcRbAAHNUAAWluc/sCYXI=")
\ No newline at end of file
diff --git a/api/search.index/2157fc47ee42.js b/api/search.index/2157fc47ee42.js
deleted file mode 100644
index b8a5e2150..000000000
--- a/api/search.index/2157fc47ee42.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBEAAADNBts0xgwHCOBAjPKgfSH63B2CQBbA6AgAAAcggBvcg==")
\ No newline at end of file
diff --git a/api/search.index/21714fa4ac41.js b/api/search.index/21714fa4ac41.js
new file mode 100644
index 000000000..7ebef6613
--- /dev/null
+++ b/api/search.index/21714fa4ac41.js
@@ -0,0 +1 @@
+rn_("UUUAABAZHhofGn8bOhw7HCUAQQAABa8YY10OpQ6mDhsCoEAAABWpbHAFAsAAAAeFHB9rHGwcA94ZaXJ5AQYAOzAAAAEAAK8AAgAtGlcAkxtXACUASwAABDYdZuUcUx1UHfsCcXIxRAAA2xrcGt0a3ho7A7CAGtUBpGNlbgUAQQAAJBMaFBpKG2OWEwUATgAABlcdZE0d84ECcHcFAEEAABQKHQsdbeocE4cCoKAAAB0iaXYbAqCAAAAbemFyBQHAAAAKXxwAvhllcxUAQgAAB4AcbW8XSBhVAUMAAAfFGgBxFm9z6BDpEAASARICEpsYGwKgYAAAG3ZjdBUAQgAAFNQajxtjvBntGgUBwAAAB/wcAVEcYW8FAcQAAAIzHQEvHWFvI4UCoAAAABzIZGYFAcQAAAYkHQMUHW90GwKg4AAAHT9obzcCAYigMAAAHHShgAAAHVSwQBytAAGgQAAAHLKgUAAAHMksmAPyhBw [...]
\ No newline at end of file
diff --git a/api/search.index/221935f949ac.js b/api/search.index/221935f949ac.js
new file mode 100644
index 000000000..e5d48d034
--- /dev/null
+++ b/api/search.index/221935f949ac.js
@@ -0,0 +1 @@
+rn_("MUgAAOAc5Bz2HP0cMUIAAAYcFBxIHFIcBQHAAAAMRB0NKh1haA8Hh6CAAAAc/6CAAAAdCKFQAAAdTKCgAAAdNB4AHA==")
\ No newline at end of file
diff --git a/api/search.index/222cbd1328d7.js b/api/search.index/222cbd1328d7.js
deleted file mode 100644
index 8d6b79761..000000000
--- a/api/search.index/222cbd1328d7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBIAAAGDh1kwRz/HCsCoHAAABl0ZW0bA6BgAAAa4KCgAAAaqm1wcjFDAACjGaQZoBonHAUBwAAAAlocCe0caW8TBwKgMAAAHJJmaff0GwAAQgABAEUADAABADYA+wJhchUBQgAAB4scBVwcYmbkGuYcIUUAAMsc2hzbHCUAQAAAA/Mbac8b0BtIHCFCAADBGcIZXRwxQQAAvxrAGsEajRwFAcAAABXMG74cAvIbdXn3AAGFgA0/ABABAgEHOjAAAAEAAAAAAAwAEAAAAMwXrBitGK4YrxiwGGoa+BrWGzwcoxyuHNgc+wNlbG8FAEQAAATMGG/5FgUBwAAAAFQXCyIcbnAbAqAgAAAX+WF1BQBCAAAGER1kAh01AEEAABBSF1MXc+Ab4RviG+MbIUMAAIgYvhvUHPsCdHoFAEYAAAV9HHLOGjFHAACPGiocKxyMHPMDAmZsOzAAAAEAAAcAAgDQEAAAcxIGAAUBQQA [...]
\ No newline at end of file
diff --git a/api/search.index/2372e6fabb83.js b/api/search.index/2372e6fabb83.js
new file mode 100644
index 000000000..d6bd829ea
--- /dev/null
+++ b/api/search.index/2372e6fabb83.js
@@ -0,0 +1 @@
+rn_("MUMAAI8XkBcRGXgbBQFBAAAPQh0S+hn7GWNy/BchQgAACxLKGssaVwEAhbBQGMYAAbCgHFkAAQBBB/UpDQAAAQABAAEAXQ0=")
\ No newline at end of file
diff --git a/api/search.index/239df144e9dd.js b/api/search.index/239df144e9dd.js
new file mode 100644
index 000000000..f146975f6
--- /dev/null
+++ b/api/search.index/239df144e9dd.js
@@ -0,0 +1 @@
+rn_("BQBKAAAYGR0aHXf4GycAAIawYBorAAGgsAAAHFugwAAAHHugQAAAGDigwAAAHHwgERk7MAAAAQAABgACAOoMAwAtDQIA")
\ No newline at end of file
diff --git a/api/search.index/23c0acb336c5.js b/api/search.index/23c0acb336c5.js
new file mode 100644
index 000000000..8d8313b0b
--- /dev/null
+++ b/api/search.index/23c0acb336c5.js
@@ -0,0 +1 @@
+rn_("UUMAAHUTdhN3E3gTvha/FgUBwAAADOUcCHkcZW4FAEoAABQKHQsdbeocFQBGAAAUrRyuHG2EHAYd84EDZnBzU4EDoCAAAB1FZWl1")
\ No newline at end of file
diff --git a/api/search.index/23d7993031c8.js b/api/search.index/23d7993031c8.js
new file mode 100644
index 000000000..af61325ca
--- /dev/null
+++ b/api/search.index/23d7993031c8.js
@@ -0,0 +1 @@
+rn_("BQBDAAAGTh1kNR3zAAFzOjAAAAEAAAAAABUAEAAAAF4NXw23GLgYCxwWHD0cPhw/HEAcQRxCHEMcRBxKHE4cTxyPHL0c9xz4HBcdRQBBAAAUkxyUHG1jGGQYZRhcHF0cBQBFAAAEVRxlDBobAqAgAAAapHV5MwKEsCAXgAABoEAAABqlAgEDOjAAAAEAAAAAAAsAEAAAAPYQhhaHFmoXaxe8GEcbZRt9G34bjRz6HPFGAAC3GLgYCxw9HD4cPxxAHEEcQhxDHEQcShxOHE8cvRwXHQUASAAAAPsbc80aKwKwQBgVAAFvcjMCA6BgAAAcomNmbzowAAABAAAAAAAHABAAAAD7DPwMcw3/F6QYqxisGJgcswAEoBAAABsbYWR2eTowAAABAAAAAAAXABAAAABGDlUOdRd2FwwY+Rm6GrsavxrFGhcbYRtiG3YbDhyHHIgcqhyrHLActBy1HO4c7xw=")
\ No newline at end of file
diff --git a/api/search.index/240bee8a2bf2.js b/api/search.index/240bee8a2bf2.js
new file mode 100644
index 000000000..b91f8788e
--- /dev/null
+++ b/api/search.index/240bee8a2bf2.js
@@ -0,0 +1 @@
+rn_("IUUAABAZHhofGjFFAADbGtwa3RreGlUBRAAAB8UaAHEWb3PoEOkQABIBEgISmxgFAEAAAAMFHGr7GyUAQwAAEcMc3hxltBroHOkc8wUCbHP1qBUAAEoC1AEBAAYBBQHAAAAETB0G6RpjdNcGAIegQAAAHHugsAAAHF8TERI6MAAAAQAAAAAACQAQAAAASg6iDqMOgRMsFy0XLhcvFzAXzRw=")
\ No newline at end of file
diff --git a/api/search.index/24545607206e.js b/api/search.index/24545607206e.js
new file mode 100644
index 000000000..ccef63294
--- /dev/null
+++ b/api/search.index/24545607206e.js
@@ -0,0 +1 @@
+rn_("BQBSAAAGUR1kQB0FAFQAAAZSHWRDHfOEAnB0BQBRAAAGTh1kNR0FAFgAAAZXHWRNHQUAUgAABlUdZEYdBQBPAAAGUB1kOx3zhwJjcAUASQAABj0dZA0dE4QDoMAAAB0coIAAABz6ZnBzGwKhQAAAHTpmbAUAWgAABlYdZEgd+wJhZacZAMlmgp/O6x2gwAAAHJqgwAAAHJugMAAAGAMAC4QdAXIbAAAFAcEAAAQlHQUwHXFz8wIBcjswAAABAAAiAA0AdBYNAA4YAwCuGAAA/BgBAB4ZAADnGQAAARoDABIaAACmGgEABBsBAHobAABYHAAAqBwAAPsCaXk=")
\ No newline at end of file
diff --git a/api/search.index/245a73273ba5.js b/api/search.index/245a73273ba5.js
deleted file mode 100644
index 12bd4feb4..000000000
--- a/api/search.index/245a73273ba5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBGAAAGyhtmxRcVAUYAAAbJGwhtHGJ3wxfEF/MBAmNz9qEKAAABAOEBAQABAAoNKwOgEAAAGxwslCUGPwBrcnY=")
\ No newline at end of file
diff --git a/api/search.index/24665ffe1ef6.js b/api/search.index/24665ffe1ef6.js
deleted file mode 100644
index dca55d074..000000000
--- a/api/search.index/24665ffe1ef6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QUIAAEoX3RfeFxUbrBtlAEMAAAbaGnJXF1gXWRdaF1sXXBddFxsCoPAAAByMYXIFAEMAAAR4HHXZGPMEAW/yZhYAAAEBZQBIAAAGLRxy4xnkGeUZ5hnnGegZ6RnHAQCFoKAAABszoMAAABs2GCAF8l4MAAA0C/sCZWk=")
\ No newline at end of file
diff --git a/api/search.index/24905808941d.js b/api/search.index/24905808941d.js
new file mode 100644
index 000000000..c0ff50042
--- /dev/null
+++ b/api/search.index/24905808941d.js
@@ -0,0 +1 @@
+rn_("BQLAAAAFZRwO0BwYkhuWHGVpbUUAQwAAA0wcafgQiRaKFosWwRoFAcMAAAo0HQ1EHWV0IwQCoGAAABx1YnABHRkAABUAQAAABhAaYvcQ+BnzgQJudBMAA6BgAAAdBaBwAAAbJWNucjswAAABAAAHAAIANBcGALscAAAFAcAAAAR0GwIXGXB1BQHBAAAyGBsZGy0bDxwWDhoPGmVpY4EDoOAAABzMY3FzBQHAAAA1FhyPHPcc+BwMAB1hafMEAWb0HBgAAOsD2wAnADFGAAAeGaYapxqoHPOCAnB2BQHEAAARFRyOHAW2HGVyEwcCoCAAABoNYnLzGRgAAAEA6wAFAcAAABklHJ0cZM4XzxfQF9EX0hfTF9QXY3hVAEAAAAZWHWTzHPQcIR0oHSkdSB0hRgAAFxgYGO0bBQHAAAATsRayFjeQG5EbdhyVHG1uawOgMAAAGEZhb3IFAcEAABZnHEQdBIMXY2kBANCgwAA [...]
\ No newline at end of file
diff --git a/api/search.index/252df5eb4395.js b/api/search.index/252df5eb4395.js
deleted file mode 100644
index bee5854e5..000000000
--- a/api/search.index/252df5eb4395.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQKEoEAAABjLoHAAABjjoDAAABgxoJAAABqQAgMCOzAAAAEAAM8AAgDeDAAACg/OAAUBxAAAA3kaBlgcdHYFAUMAABFUGtsbA+caaW69EfsDaW9y")
\ No newline at end of file
diff --git a/api/search.index/2544a6ea9394.js b/api/search.index/2544a6ea9394.js
deleted file mode 100644
index a45b7dccb..000000000
--- a/api/search.index/2544a6ea9394.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHEAAAR5hagHAQ2G2l0JwAAx6AwAAARyrCAGZAAAbBAFwQAAaDQAAAb8LAgGkkANaBgAAAa04AEoA30vAcAAAEJwAU2AQUBwAAAC7MbBKoQbnQVAEgAAAYFHWR1HOccI4ECsFAYpgABZnQFAcAAAAUaHDTTF+UYsRmBGmNz8wABZfMsBAAA8QABAAUBwgAADB4cAhwWZHMFAEIAAAFfE2WYCvsDZWlyAQAAOzAAAAEAABYABQBnDAYAlBcGAFUaBgDyGgAAMRwAAAUAQAAABOYbYxob8wMBcwGTGgAAEwICoIAAABuqZnIBLA4AAPMCAmlzATYOAAABAAOgQAAAGk2g0AAAGzKxABwqAAFiY3TzyQgAAJEBAQAFAcIAAAA2DQa+F2Vp+wJjZEcfAImg4AAAGnugYAAAHRGgUAAAEKk5gQc6MAAAAQAAAAAADQAQAAAAWgHMCF4KXwqKDLgMIw7/FwAYARgCGAMYUBoCHQ==")
\ No newline at end of file
diff --git a/api/search.index/2645dc3d039e.js b/api/search.index/2645dc3d039e.js
new file mode 100644
index 000000000..3213d4f0a
--- /dev/null
+++ b/api/search.index/2645dc3d039e.js
@@ -0,0 +1 @@
+rn_("BQHAAAAHhRwD3hlpeRUATQAABDYdZlMdVB0VAEIAAAeAHG1vF0gYBQBCAAAEjxtj7RoVAEIAAAKqGHKjFkUY84ECZWwVAEUAAAk6HWaVGG8bBQHBAAABuhkHchtpcAGCAqCQAAAcwqEQAAAdIWl1KwKgwAAAHPBydPdhAMygEAAAGb6gQAAAGQihMAAAHSKggAAAG0qwUB0QABDADLULOjAAAAEAAAAAAAcAEAAAAO8MQQ7mEZETMxcfG8YcyBw=")
\ No newline at end of file
diff --git a/api/search.index/267964869f5d.js b/api/search.index/267964869f5d.js
new file mode 100644
index 000000000..98fa17017
--- /dev/null
+++ b/api/search.index/267964869f5d.js
@@ -0,0 +1 @@
+rn_("BQHAAACLPRw+HD8cQBxBHEIcQxxEHL0cCBIcb3kxRAAA7hfvF/AX8RcFAcAAAAboGQNnF3J1zwHFoQAAABzesGAZCgABBAEwAg==")
\ No newline at end of file
diff --git a/api/search.index/26a2d3f036f4.js b/api/search.index/26a2d3f036f4.js
deleted file mode 100644
index 461e9cc3b..000000000
--- a/api/search.index/26a2d3f036f4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLGAAAC8RoJoBwKuxxhZXMVAEAAABLVELwRdYkLigsFAEQAAAYJHGZoGAUAQwAABCEcdT0X8wIBb/IyDgAAjAP7A2hvciUAQQAACNsbYj8O3RjVGjUBQgAAUecX6BfpF8oZcxqFGhWSGgwcaXPJGsoa0hsFHDFEAAAlGCYYyxl0GmUARAAABgwdZLIZsxmaGpsaqBypHPccUwEDsDAayAHzY25099kMAACxCQEASAESAcwA0ABRQwAAQxNEE0UTRhOGFocWBQHAAAAMohwIOBxlbgUASgAAFMccyBxtpxwVAEYAABRrHGwcbUMcwxzzgQNmcHNTgQOgIAAAHQFlaXVbA6AQAAANSGdubwUAQAAAAnAWeX4MDwjIoMAAABwFoCAAABNWoCAAABNXoGAAABdBoKAAABsboIAAABm5oJAAABp0AAHNAwUBxwAAAYUaBQwcaXMbhLAQDUYAAaCAAAAaSqBQAAAYW0QQAtc [...]
\ No newline at end of file
diff --git a/api/search.index/26c9f6ea763e.js b/api/search.index/26c9f6ea763e.js
new file mode 100644
index 000000000..965697f30
--- /dev/null
+++ b/api/search.index/26c9f6ea763e.js
@@ -0,0 +1 @@
+rn_("BQHAAAAHoRwSjhMGGW95cUQAAD8bQBtBG0IbihuLG4wbjRtXAAHFsGAZAwABoEAAABfNoKAAABzbAAggGjowAAABAAAAAAAIABAAAADQCtEK0grVDNYM1wz/EOgR7Bc=")
\ No newline at end of file
diff --git a/api/search.index/26d2afeff2d8.js b/api/search.index/26d2afeff2d8.js
deleted file mode 100644
index 62cbdde98..000000000
--- a/api/search.index/26d2afeff2d8.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLGAAAByRwG6RwI9Rxpc3QjhgKgQAAAHFdjbgUATwAABgsdZPQcBQBJAAAG8xxkthwFAEwAAAYGHWToHAUATAAABgUdZOcc+wJhafOEA21udPsCb3U=")
\ No newline at end of file
diff --git a/api/search.index/2734efbcc0e4.js b/api/search.index/2734efbcc0e4.js
deleted file mode 100644
index 2f38c40ec..000000000
--- a/api/search.index/2734efbcc0e4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHXxwSXBPKGG95cUQAAAAbARsCGwMbSxtMG00bThtXAADFsGAYxwABoEAAABeToKAAAByZAAggGjowAAABAAAAAAAIABAAAAC3CrgKuQq1DLYMtwzVELwRshcFAEIAABImHAAdYZIK+wJrdA==")
\ No newline at end of file
diff --git a/api/search.index/2754cebf7b8a.js b/api/search.index/2754cebf7b8a.js
deleted file mode 100644
index 67ad0ea4b..000000000
--- a/api/search.index/2754cebf7b8a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBFAAAIcxxjZBrpHAUBwAAAA3kYBCIcYW/zAAJ0dffKEAAAfgEBAAEAlQYBAIIBVQBAAAAFihpldhZ3FncYeBiHGogaGwKwYBqLAAFmdBsCoGAAABnOZW8BAQOgQAAAHHewQBrsAAGgAAAAF5FmbXM7MAAAAQAAFQAHABIXDgCWGgAAJBsAAE8bAAA4HAAAyRwAAPocAQAHDQCJoEAAABuzoDAAABjDoEAAABxZoFAAABpjoCAAABZ1oIAAABz1JwkHOjAAAAEAAAAAAAsAEAAAADsOgg6DDoQOWxZcFk4X6hm4G2McwhztHA==")
\ No newline at end of file
diff --git a/api/search.index/27642e8a4c21.js b/api/search.index/27642e8a4c21.js
deleted file mode 100644
index 2bc7d7c16..000000000
--- a/api/search.index/27642e8a4c21.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUgAAIAaIhsjG2kcEwMCoFAAABx6Z3I7MAAAAQAAGwAJAFwOCABxFgMAjxcBAKUZAADAGQAAqxoBALQaBQAuGwEAYhwAAAUARgAABgkcZmgY8wIBc/LUDAAAhwH7Amx08wABYfIGAwAAmA0=")
\ No newline at end of file
diff --git a/api/search.index/2829eca3c380.js b/api/search.index/2829eca3c380.js
new file mode 100644
index 000000000..9aa855ad0
--- /dev/null
+++ b/api/search.index/2829eca3c380.js
@@ -0,0 +1 @@
+rn_("MUQAACwZLRkvG3cbBQBRAAAGVh1kSB0FAcQAACiwHO4c7xwEIh1hbxsCoGAAABsbYWUhQgAA7RjuGH4cBQHAAAAyYRhiGAgasxoDARtrcEUCQQAAFcYYxxgaWRxaHDOPF5AXERl4G29zdCkNKg0rDSwNiRobA6AgAAAc07AQFrUBOG5zeAUBxAAAAY4XAjMYYXW/AYWgAAAACOKRQEAVAEgAAAZSHWQEHUMdI4ECoHAAABmxZW0FAcAAAAKcHAkxHWlvEwcCoDAAABzUZmn3NRwAAEIAAQBGAAwAAQA3ABsCsDAa3wGJYXIhRQAADh0eHR8dJQBAAAADNBxpEBwRHIkcIUIAAP4Z/xmfHDFBAAD+Gv8aABvPHAUBwAAAFQ0cAR0CMxx1efMBhAIBAzowAAABAAAAAAAMABAAAAAGGOgY6RjqGOsY7BipGjcbFxx9HOYc8RwcHfsCZWwFAEIAAAZVHWRGHVFAAAD3F8M [...]
\ No newline at end of file
diff --git a/api/search.index/2840a666476e.js b/api/search.index/2840a666476e.js
deleted file mode 100644
index 7c6e18f0a..000000000
--- a/api/search.index/2840a666476e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHXxwSXBPKGG95cUQAAAAbARsCGwMbSxtMG00bThtXAAHFsGAYxwABoEAAABeToKAAAByZAAggGjowAAABAAAAAAAIABAAAAC3CrgKuQq1DLYMtwzVELwRshc=")
\ No newline at end of file
diff --git a/api/search.index/284af2678775.js b/api/search.index/284af2678775.js
deleted file mode 100644
index 96d4a790a..000000000
--- a/api/search.index/284af2678775.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQCEoDAAABCsoDAAABCtoEAAABNLoHAAABe9ABUBOjAAAAEAAAAAACEAEAAAALsIvAi9CL4IvwjACMEIwgjDCMQIxQjGCFMKVApVClYKxhDREEITUxNUE0IXyxfXGOMY5BjmGOcYkBq9G8MbFBwfHF4c")
\ No newline at end of file
diff --git a/api/search.index/288c6596783c.js b/api/search.index/288c6596783c.js
new file mode 100644
index 000000000..d39fa5d5b
--- /dev/null
+++ b/api/search.index/288c6596783c.js
@@ -0,0 +1 @@
+rn_("BQBFAAAGSxxiphgFAcEAAAKnGAKlGGJ08wABdPTeEAAADQEBADgGRQFCAAAk8hvzG8EcBScbY3d5F3oXWRhaGGAbKwKgQAAAGchlaQUBRAAAD0IdEvoZ+xljcvwXBQHAAAAj4BjhGAAcCXgbYW+3DACIsDAXeASJoHAAABn8oDAAABhbNJgS9VgOAAABADAA/gjRAA==")
\ No newline at end of file
diff --git a/api/search.index/28de2d445bd4.js b/api/search.index/28de2d445bd4.js
deleted file mode 100644
index adbcb0387..000000000
--- a/api/search.index/28de2d445bd4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQFJAAAHixwFXBxiZuQa5hw1AUIAABfsG5ocAO8WZnMhFiIWIxYkFgUARQAABgocYmoYBQHBAAACaxgCaRhidPMAAXT0tBAAAAsBAQAqBkUBQgAAJLEbsht/HAXoGmN3PxdAFx0YHhghGysCoEAAABmLZWkFAUQAAA/+HBK9Gb4ZY3LCFwUBwAAAI6QYpRi/Gwk5G2FvtwwCiLAwFz4EgqBwAAAZv6AwAAAYHzSYEvU0DgAAAQAwAOgIzwD7A2VpdA==")
\ No newline at end of file
diff --git a/api/search.index/28fddb2dc7bb.js b/api/search.index/28fddb2dc7bb.js
new file mode 100644
index 000000000..a97cf7c0f
--- /dev/null
+++ b/api/search.index/28fddb2dc7bb.js
@@ -0,0 +1 @@
+rn_("FQBGAAAGNx1kRBv5HDUAQAAAE4wXjRdpXxhgGJEakhoFAEMAAACLF3OjHGMAA7AQGN4AAWluc/LvGAAAMwQVAEQAAAZSHWQEHUMdIwMCoIAAABy1Y2z3/QwAAHcAAQABAPsJMgOKAgUCwgAAAjAbCeMcCv4cYWVzKwKgEAAAF/ZpbysCoGAAABmxZXLVAEIAAAQ2HWbUGdUZ1hnXGdgZ2RnaGfUbKRwuHDEc5RxTHVQdZwcAiLBwGeAAAaBwAAAZ+aEQAAAdDxMxBfbMCAAA1AASEAEAAQABAA==")
\ No newline at end of file
diff --git a/api/search.index/290d29134174.js b/api/search.index/290d29134174.js
deleted file mode 100644
index dc6871d00..000000000
--- a/api/search.index/290d29134174.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHBAAAANg0GvhdlaTUAQQAAAdwads0bRhxHHHMcJQFBAAAWsByxHBWgGiccZXOlETsW2hcrA7AAFjoCLKBwAAAbsGRvdgEAAqDQAAAcraEwAAAc3mFwAV8TAAAbAqAwAAAXjmRtBQBGAAAQOhtWHHLpGvMDAXABbBYAABsCoEAAABizYW8FAEMAAAYTHWQJHfMCAW8BTRYAAHcDAIewcBrDAAGgwAAAHEU1QRA6MAAAAQAAAAAACgAQAAAAmAqsDDINPw1ADUENSg1LDawXxhi6GSUAQAAAA/Mbac8b0BtIHDUAQAAAOMkayhrSGwUcYfgXkhrUGgwcBQBGAAAAuhtzjhoFAcEAAACSFyLdF94XrBtlabOBhIAZwQASmykABFFDAACtF64XXBpdGr0avhoxRAAAfBd9F34XfxcFAcAAAC/LHNoc2xwnzRtGHEccYXIjBAOgEAAAG9+wUBwpAGFlcHMBbRYAAPOBAmJ [...]
\ No newline at end of file
diff --git a/api/search.index/291b925bfb6f.js b/api/search.index/291b925bfb6f.js
deleted file mode 100644
index 0a0d72d32..000000000
--- a/api/search.index/291b925bfb6f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBKAAAGchx2mBwFAEUAAAwBHWE5HCOBAqCgAAAcSWFzJQBAAAATjBeNF2nPF9AXvRhBQgAAxBDFEEwWBhutHAUDQAAAUoIYgxiEGIUYhhiHGDNqFncXeBeyHAZ0GFTYGdkZ2hnbGdwZ3RlrcHJ25xsFAcIAAAayHACLF21zGwKggAAAG8BhabUBQQAAFMEbwhsASxZtczoO4RHiEeMR5BHlEeYRzhjPGHgapRqmGgUBwAAABdEXEokXihd1eecvAMugwAAAHQGwYBfSAwagAAAADiPAQKg7OzAAAAEAACsADgCwCgIAlQwWAKAQAwBiEwEAsRcAAI0YAQDMGQEA9hoAACgbAACrGwAAORwAAEkcAABXHAAArxwAAA==")
\ No newline at end of file
diff --git a/api/search.index/296396bd34db.js b/api/search.index/296396bd34db.js
deleted file mode 100644
index 56f8cdd68..000000000
--- a/api/search.index/296396bd34db.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBFAAAIcxxjZBrpHAUBwAAAA3kYBCIcYW/zAAJ0dffKEAAAfgEBAAEAlQYBAIIBVQBAAAAFihpldhZ3FncYeBiHGogaGwKwYBqLAAFmdBsCoGAAABnOZW8BAQOgQAAAHHewQBrsAAGgAAAAF5FmbXM7MAAAAQAAFQAHABIXDgCWGgAAJBsAAE8bAAA4HAAAyRwAAPocAQAHDQGJoEAAABuzoDAAABjDoEAAABxZoFAAABpjoCAAABZ1oIAAABz1JwkHOjAAAAEAAAAAAAsAEAAAADsOgg6DDoQOWxZcFk4X6hm4G2McwhztHCFDAACUHJUcvRxRQwAATxPyFvMW9Bb1FvYWNwEAhqAQAAAKnrAgDNID1KAgAAATTRlQAjswAAABAAAOAAIALwQAAAYGDQA=")
\ No newline at end of file
diff --git a/api/search.index/29642555d079.js b/api/search.index/29642555d079.js
deleted file mode 100644
index 36a3eecfc..000000000
--- a/api/search.index/29642555d079.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBDAAADCxxpghojBAKgcAAAHMZwdPTGFwAA4gABAAEAIUIAAHYX6BjQGQUAUgAABhEdZAIdFQBAAAAAHhxzaRZ1F2UARQAABXoccsAZtBq1GrYatxq4Grka84ECY2cVAEIAAAEgHGmvGhgbGwKwEBggAvRlbBsCoIAAAByvaXIlAE0AAAYMHWSoHKkc9xwFAcMAAANhHBBSGlMabnPzgQJsbQUBxAAAMUEb1BslHE0cBXQcZXL3CwKIoHAAABxnJogHOzAAAAEAACkAFABmDg0AMhcBADgXAQBLFwAAZhcAAG4XAwDfFwEA8RcAABMYAQBVGAAAyRgAANwYAAC/GQAAuhoCANIaAABTGwAA5BsAAD8cAABVHAAAWxwAABsCoCAAABNQYWQ=")
\ No newline at end of file
diff --git a/api/search.index/298b2ab0020d.js b/api/search.index/298b2ab0020d.js
new file mode 100644
index 000000000..077e03a4c
--- /dev/null
+++ b/api/search.index/298b2ab0020d.js
@@ -0,0 +1 @@
+rn_("IUEAAOIY4xj0G/FGAAC3GLgYCxw9HD4cPxxAHEEcQhxDHEQcShxOHE8cvRwXHQUARgAAAPsbc80aI4ECoCAAABfMYWQrArBAGBUAAW9ydwAAhaBgAAAcorBAGc0AASRQBDowAAABAAAAAAAKABAAAAD7DPwMaA1pDXMN/xekGKsYrBiYHBYd8wABZfJ1AQAAAQA=")
\ No newline at end of file
diff --git a/api/search.index/29ccdb250625.js b/api/search.index/29ccdb250625.js
deleted file mode 100644
index 0f4ab4797..000000000
--- a/api/search.index/29ccdb250625.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("VQBCAAADCxxpzhCqEVEWUhZTFoIaFQBFAAAFnBxjQBxBHFUAQAAARAQYBRgGGAcYCBh0zwwxDdgY3hjeGd8ZQUUAAP8XABgBGAIYAxgFAEUAAAbXHGJqHBUAQQAABB0cZuoc6xwVAEIAAAQ+HGbuHO8c+wJhbyFFAAC2GQkbChvzAwNscHfz6RgAAHYB0AEFAEIAAARQG2OuGiOBAqAgAAAYCWVsIwADoPAAABz2oIAAABsLZWZy884MAAC2DwIA8wCFKIASOzAAAAEAAAYAAgCVCgAAXwwFAJuEoKAAABrcoEAAABzAEEFA")
\ No newline at end of file
diff --git a/api/search.index/2a1e3fb6cc36.js b/api/search.index/2a1e3fb6cc36.js
deleted file mode 100644
index 6a2cc9731..000000000
--- a/api/search.index/2a1e3fb6cc36.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQBAAAAGTxppygjLCFwKXQoFAEMAAAbMHHctGyMDAqBQAAAcSXN0AYYOAABlAEQAAAXbGHIoFikWKhYrFiwWLRYuFgUARwAAAyEbbBwYYUEAALoXthkJGwobrxtCHIEc4wCEsJAZiQABFBAEOzAAAAEAABAABgCkBwkAdRoAAFEbAQA1HAAAVBwAAKUcAQCfAsigkAAAHJugEAAADlOgcAAAHQGgIAAAFmSgIAAAHIAAAooP")
\ No newline at end of file
diff --git a/api/search.index/2a57022f00d1.js b/api/search.index/2a57022f00d1.js
new file mode 100644
index 000000000..e03a4ada3
--- /dev/null
+++ b/api/search.index/2a57022f00d1.js
@@ -0,0 +1 @@
+rn_("BQLAAAAFZRwO0BwYkhuWHGVpbUUAQwAAA0wcafgQiRaKFosWwRoFAcMAAAo0HQ1EHWV0IwQCoGAAABx1YnABHRkAABUAQAAABhAaYvcQ+BnzgQJudBMAA6BgAAAdBaBwAAAbJWNucjswAAABAAAHAAIANBcGALscAAAFAcAAAAR0GwIXGXB1BQHBAAAyGBsZGy0bDxwWDhoPGmVpY4EDoOAAABzMY3FzBQHAAAA1FhyPHPcc+BwMAB1hafMEAWb0HBgAAOsD2wAnADFGAAAeGaYapxqoHPOCAnB2BQHEAAARFRyOHAW2HGVyEwcCoCAAABoNYnLzGRgAAAEA6wAFAsAAABklHJ0cC3YbZM4XzxfQF9EX0hfTF9QXY254VQBAAAAGVh1k8xz0HCEdKB0pHUgdIUYAABcYGBjtGwUBwAAAE7EWshY3kBuRG3YclRxtbmsDoDAAABhGYW9yBQHBAAAWZxxEHQSDF2NpAQD [...]
\ No newline at end of file
diff --git a/api/search.index/2a86844f24d8.js b/api/search.index/2a86844f24d8.js
new file mode 100644
index 000000000..c232454f2
--- /dev/null
+++ b/api/search.index/2a86844f24d8.js
@@ -0,0 +1 @@
+rn_("FQBEAAAWThxPHGarGKwYKwOgYAAAGJigMAAAGGxlb3IFAcEAAAKYFgxoHGZuBQHEAAABlhgFExtpc/sCbG8FAcUAAALqGQOxGmtuGwKgsAAAG3BjdTcCAIawABaVAAGgMAAAHAWgcAAAGJcVAgY6MAAAAQAAAAAADgAQAAAAwgjDCMQIxQj0CJAKfg6fDqAOoQ6MFo0WOBheG/sb")
\ No newline at end of file
diff --git a/api/search.index/2a8e614f3577.js b/api/search.index/2a8e614f3577.js
new file mode 100644
index 000000000..cd07d281d
--- /dev/null
+++ b/api/search.index/2a8e614f3577.js
@@ -0,0 +1 @@
+rn_("BQBRAAAGVh1kSB0xRAAAYRhiGAgasxoFAEIAAAZVHWRGHfMAAW0BxxAAAAUBwAAAEboYuxgIFh1lb3FBAACOFo8WHxggGOMZ6RlGG4wcBQBKAAAGTh1kNR0hRAAAExn+G2AcZQBEAAAGUB1k7xnwGdka2hrrHOwcOx1n8wCMoDAAABiQoMAAAB0hoCAAABi5sDAbBwH3tikXOjAAAAEAAAAAACgAEAAAAPoM/xG5FrsWwhbDFukX6hf6Fw0YmRiaGNcY2BjZGNoY2xjcGN0YIRm2Ge4ZwBrQGhIbXBtkG/obGBwZHBocGxxTHFQcWxxlHHwckByRHJoc4Rw=")
\ No newline at end of file
diff --git a/api/search.index/2ab8661f6df3.js b/api/search.index/2ab8661f6df3.js
new file mode 100644
index 000000000..2114bcdf7
--- /dev/null
+++ b/api/search.index/2ab8661f6df3.js
@@ -0,0 +1 @@
+rn_("FQBEAAADcxtsDxlxHCOBAiIZNflJrHB2CQBbA6AgAAAcxABvcg==")
\ No newline at end of file
diff --git a/api/search.index/2adae993af78.js b/api/search.index/2adae993af78.js
new file mode 100644
index 000000000..e76337ccc
--- /dev/null
+++ b/api/search.index/2adae993af78.js
@@ -0,0 +1 @@
+rn_("MUgAAL8aYRtiG6scEwMCoFAAABy8Z3I7MAAAAQAAGwAJAIAOCACpFgMAyRcBAOIZAAD9GQAA6hoBAPMaBQBtGwEApBwAAAUARgAABkocZqQY8wIBc/L1DAAAigH7Amx08wABYfIMAwAAvA0=")
\ No newline at end of file
diff --git a/api/search.index/2afce714a563.js b/api/search.index/2afce714a563.js
deleted file mode 100644
index 5898090b2..000000000
--- a/api/search.index/2afce714a563.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQEAOzAAAAEAAMMAAQBlE8MAMUIAAPAY8RjwGjgbBQBSAAAGER1kAh0FAE8AAAYMHWT3HPMGAmNw9W4XAAABAAEAAQDOBBUAQAAAAAMdNfwX/Rf7hBhACA==")
\ No newline at end of file
diff --git a/api/search.index/2b3424b6cbce.js b/api/search.index/2b3424b6cbce.js
new file mode 100644
index 000000000..2dccc3fdf
--- /dev/null
+++ b/api/search.index/2b3424b6cbce.js
@@ -0,0 +1 @@
+rn_("BQBBAAAUHBsdG225GfMCAWnysRgAAAEAFQBBAAAUkxyUHG1cHF0c8wcBafVHGwAANgABAA8BbQAFAcQAAAG3Ggr1HGlu+wNjb3A1AEMAAAHPHGl9HOYc8RwcHROIAqAwAAAcfnN0MUAAAGwOsxdiHLocBQHAAAAKbxwHGhthaQUBwAAABfEZBrYaY2wVAEUAAAY9HWQNHTodE4MDoMAAAByqoDAAABztZm5zBQJAAAAZKB0pHQcAHRjWHNccaXBzZhcbAqCAAAAavXJzAQCPoDAAABt1sGAZtwABTxlF49VmCAYubPWMOPh4obvmoGAAABnyoQAAAByrO1Y9sOhisIAa5gABOvl0Y6stDMJFv6xnoOAAABzEfidM//4JoDAAABdJoDAAABD+9fhHOzAAAAEAAEAAEQDBCgcA7gwAADANIgCVGAAAFxkAAL0ZAABvGwAAPBwAAEUcAAC2HAAAvBwAAL8cAAA3HQAAPR0 [...]
\ No newline at end of file
diff --git a/api/search.index/2b3a40889382.js b/api/search.index/2b3a40889382.js
deleted file mode 100644
index 3eb127f17..000000000
--- a/api/search.index/2b3a40889382.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHFAAAobhyrHKwcBN4cYW8FAcAAAATCGiKxGLIYPRxveRUASgAABg4dZMEc/xwFAcAAAAJaHAntHGlvEwgCoDAAABySZmn39BsAAEIAAQBFAAwAAQA2ACFFAADLHNoc2xwlAEAAAAPzG2nPG9AbSBwhQgAAwRnCGV0cMUEAAL8awBrBGo0cBQHAAAAVzBu+HALyG3V58wGEAgEDOjAAAAEAAAAAAAwAEAAAAMwXrBitGK4YrxiwGGoa+BrWGzwcoxyuHNgc+wJlbPMAA3B0dQE3FgAAFQBBAAAF6hp3ehd7FxUAQAAAFMccyBxtsBqnHPsCZG5FAEQAAADcG3NxGJMZQxtEGxYcBQBBAAAlQBv5G/obd1Ea5xwAyaCAAAAb8aAgAAAXQ6BgAAAcfkBMBQs7MAAAAQAABgADAM0RAwBFHAAAuBwBAA==")
\ No newline at end of file
diff --git a/api/search.index/2b72cc7fda85.js b/api/search.index/2b72cc7fda85.js
deleted file mode 100644
index f32b3565f..000000000
--- a/api/search.index/2b72cc7fda85.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAASnxmgGQK0GQdmGGFvciFDAACeGfMbkhwFAcAAABJ6GFocGWMc7RxpbwUBxgAACVQcCVUcY3YFAcAAAASxEA3EG29yZwsAi6DQAAAbOLBwGbcAkKBQAAAWZKCgAAAZuaBAAAAQsKCgAAAZuj2hDjowAAABAAAAAAAWABAAAABeAV8BYAHQA1AW2BfZF8IYyBnJGccazxrPG9Ab9Bs2HDccSBx8HH4ciByJHL8c")
\ No newline at end of file
diff --git a/api/search.index/2b7c3c2fef0d.js b/api/search.index/2b7c3c2fef0d.js
deleted file mode 100644
index f5a7bbe4e..000000000
--- a/api/search.index/2b7c3c2fef0d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUUAAL4YvxjqGgUARQAABnEcYokaBQBAAAAE5htjGhvzAgJzdwGTGgAAKwKgYAAAGdRhaScBAIWwYBzkAAGggAAAG6qgMAAAGk8wABU7MAAAAQAAUwASALQKAgCzDAEASA0AACwOAAA3DgAAPQ4AAKQQAABUEh4ASBMAAGoWAAB3FwEAehcBADAYAAAzGB4AoxkBAKAaAAAnHAAAshwAAA==")
\ No newline at end of file
diff --git a/api/search.index/2bbc0cf60842.js b/api/search.index/2bbc0cf60842.js
deleted file mode 100644
index 62b445d8f..000000000
--- a/api/search.index/2bbc0cf60842.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBGAAAG8xxkBRu2HNUAQgAABPIcZpcZmBmZGZoZmxmcGZ0ZtBvoG+0b8BuiHA8dEB2TAISgMAAAF7ygcAAAGbwSAQH0dRkAAAEAAQABAA==")
\ No newline at end of file
diff --git a/api/search.index/2c059817d0b9.js b/api/search.index/2c059817d0b9.js
new file mode 100644
index 000000000..3da902856
--- /dev/null
+++ b/api/search.index/2c059817d0b9.js
@@ -0,0 +1 @@
+rn_("BQBGAAAQeRuXHHIoG0MBhKEgAAAdB6AwAAAbW6CAAAAaHQiQAjowAAABAAAAAAAKABAAAADKCA0JDgmkFkYY4BjhGPIb8xsAHMEc")
\ No newline at end of file
diff --git a/api/search.index/2c0f586bd94b.js b/api/search.index/2c0f586bd94b.js
new file mode 100644
index 000000000..af858f86a
--- /dev/null
+++ b/api/search.index/2c0f586bd94b.js
@@ -0,0 +1 @@
+rn_("BQBCAAADuhphTBxlAEAAAAb5F2KzCrQKWQ1aDVsNXA1dDQEAADswAAABAACCAAEAJBWCACsCoEAAABgFZW+RRAAATBtNG04bTxtQG1EbUhtZHFoc0RxbA6CAAAAdGGJzdDFCAACPE5ATqBipGPMAAWU7MAAAAQAAyQADANMKAAB7DcUAexICAPuECGAE")
\ No newline at end of file
diff --git a/api/search.index/2c9425063f00.js b/api/search.index/2c9425063f00.js
deleted file mode 100644
index d2f7293d9..000000000
--- a/api/search.index/2c9425063f00.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUgAAMgZyRnHGgUBxgAAEocaiBog3xjgGGIacnMhRQAAzxfQF70Y+wNjbnRRSAAAxBnFGcYZxxnFGsYaBQHIAAAjzxvQG0gcKIgciRy/HHB0+wJhciFMAAA8Gz0bIxyvAoagAAAADUygMAAAFw6gIAAAFko4gAMhQgAAeg57DnwO+wJhZQ==")
\ No newline at end of file
diff --git a/api/search.index/2cae0bf8abcd.js b/api/search.index/2cae0bf8abcd.js
deleted file mode 100644
index 5b4376f6a..000000000
--- a/api/search.index/2cae0bf8abcd.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBFAAAFnBxjQBxBHAUASQAABtccYmoco4OEoQAAABz2oAAAABjYKAASBQBJAAAG+RxkyhwThAOgwAAAHNiggAAAHLdmcHP7AmZsBQBaAAAGEh1kBB37AmFl")
\ No newline at end of file
diff --git a/api/search.index/2ce08239ed6d.js b/api/search.index/2ce08239ed6d.js
deleted file mode 100644
index b1d37ff23..000000000
--- a/api/search.index/2ce08239ed6d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUsAANQY4RniGTUAQAAAE1IXUxdpIxgkGFIaUxoFAEMAAABRF3NhHGMBA7AQGKIAAWluc/KzGAAAKwQFAcAAABWyGrMaAncaYW8FAEQAAAPIG24nFwUBwAAABbEaFnoarRpsbgUBwAAAA94cU60XrhdcGl0avRq+Gmx1BQLDAAAIxRwCBxwIsxxjdXcjBAKgYAAAGuNicAFlFgAAIUcAAG4cqxysHPsCbHT7AmFv9wAAhbAAHM0ADzSAAjswAAABAAAPAAYA2AgAAHkKAACTFwAA6hgFANgZBQDpGwAAe4SgMAAAF/4QEAY=")
\ No newline at end of file
diff --git a/api/search.index/2d00a54c39b0.js b/api/search.index/2d00a54c39b0.js
deleted file mode 100644
index 442c0bdc4..000000000
--- a/api/search.index/2d00a54c39b0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQPCAAAXuxu8GwPZHDL6F/sXLRguGBL8F/0XaGpzeWUBQgAAFgQc+RxW1xvYG9kb2htPHFAcZHbqFusW7BZjGOsZyhz2HCsCWLIBxIqpZW0rAqDgAAAcj29yAQIAOzAAAAEAAMUAAgArDgAA4BDEAFFAAACKDP8XABgBGAIYAxgFAEUAAAbXHGJqHBUAQQAABB0cZuoc6xwVAEIAAAQ+HGbuHO8c+wJhbyFFAAC2GQkbChvTAYSwMBsWAAEAqBD1DhcAANsBdgHQAQMARQBCAAADyBtuHhYnF08XUBeYGvsDZWx4RQBEAAAY9Rv2G2TCENsR3BFgGIoaGwKg0AAAHM5ydAUAQQAAFN0a3hptfBnzAgFp8nUYAAABABUAQQAAFFIcUxxtGxwcHPMHAWn1CBsAADYAAQANAWsABQHEAAABeBoKshxpbvsDY29wNQBDAAABjRxpPByjHK4c2BwTiAKgMAAAHD1zdAUBwAA [...]
\ No newline at end of file
diff --git a/api/search.index/2d540368095b.js b/api/search.index/2d540368095b.js
new file mode 100644
index 000000000..4504b31d8
--- /dev/null
+++ b/api/search.index/2d540368095b.js
@@ -0,0 +1 @@
+rn_("JQBBAAAIHBxiYw4ZGRQbNQFCAABRIRgiGCMYBxqyGsQaFdEaTRxpcwgbCRsTHEYc8wACa28BEhwAACMAAqBwAAAbZW9zOzAAAAEAAAcAAgBmFgAAvxkGAAUBwQAABG4cFcMaSRxxcwUBygAABCUdBTAdcXMrAqAgAAAZ9mFy1QBEAAAENh1m1BnVGdYZ1xnYGdkZ2hn1GykcLhwxHOUcUx1UHUsDsDAQzgKsoGAAABrCZG91JQBBAAASqBipGGV7EnwSfRIFAcAAAAPPGmSUGpUalhqXGpgamRqaGnJ4BQBQAAAGVx1kTR0rArBwHDYAAWRyBQBFAAAGCBxi+xcFAEcAABb3HPgcZgccE4MCoDAAABn4cHMbAqBwAAAbXmFlCQKhAAAAHOKgsAAAHKJhb0sDoEAAABvsoKAAABwsY3F0BQBJAAAG4Rx2XRsFAcAAAAa7HAHvGzNxBQHAAAACJBsEgxxpb0cChIagMAA [...]
\ No newline at end of file
diff --git a/api/search.index/2d7416ac2e92.js b/api/search.index/2d7416ac2e92.js
new file mode 100644
index 000000000..98f87641b
--- /dev/null
+++ b/api/search.index/2d7416ac2e92.js
@@ -0,0 +1 @@
+rn_("RQBBAAAUkxyUHG1jGGQYZRhcHF0cBQBFAAAEVRxlDBobAqAgAAAapHV5MwSEsCAXgAABoEAAABqlAgEDOjAAAAEAAAAAAAsAEAAAAPYQhhaHFmoXaxe8GEcbZRt9G34bjRz6HAUBwAAAE/UQ6BkEnhxpchUBQQAABAgZBN4Zb3QzFx8bxwEAhqBwAAAczaCAAAAYFLDwHNYAATpAAjowAAABAAAAAAAHABAAAADjB/EZ8hm2GhobIxvEHCod")
\ No newline at end of file
diff --git a/api/search.index/2d879760965a.js b/api/search.index/2d879760965a.js
deleted file mode 100644
index 502054d74..000000000
--- a/api/search.index/2d879760965a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBDAAAUIRx4HHU9F9kYFQBDAAAEmBpm0BzRHBUARgAABN4bZt8c4BxTgQOgAAAADQJvc3TzAAJnb/QyDgAAjAOoBAEB")
\ No newline at end of file
diff --git a/api/search.index/2dac8164afe8.js b/api/search.index/2dac8164afe8.js
new file mode 100644
index 000000000..05bda5319
--- /dev/null
+++ b/api/search.index/2dac8164afe8.js
@@ -0,0 +1 @@
+rn_("ZQBBAAATgxOEE2a+CmcWaBZpFmoWaxZsFgUBwQAAAwIZVg4YDxgQGBEY/Bj9GGpwMUIAAAMZBBkvHDAcIUgAAHcceBy+HDUAQgAAAc8caX0c5hzxHBwdOwOgoAAAHQRwdHUjhAOgEAAAGu+gMAAAHH5pc3TzgQJpbisDsGAZzQABoBAAABhbZ3J0+wNhcnU=")
\ No newline at end of file
diff --git a/api/search.index/2e0498769960.js b/api/search.index/2e0498769960.js
new file mode 100644
index 000000000..94605ef4f
--- /dev/null
+++ b/api/search.index/2e0498769960.js
@@ -0,0 +1 @@
+rn_("BQHAAAAU0RpNHAMmHGVpBQHAAAABRx1GqBepF6oXqxeAHGRlkUEAAJ4MnwwhGCIYIxgHGrIaxBroGkEdBQBEAAADJhtu6RHnAgCGoGAAABnJsGAZygABMJECOjAAAAEAAAAAAB4AEAAAAIgTuhZvF30XJRgmGCcYKBgpGCoYSBi+GL8YwBjBGMIYwxjUGNUY6hnsGe0ZCBsJGzYbext8GxMcRhxkHDwd")
\ No newline at end of file
diff --git a/api/search.index/2e10435c5529.js b/api/search.index/2e10435c5529.js
new file mode 100644
index 000000000..5fd9c9b49
--- /dev/null
+++ b/api/search.index/2e10435c5529.js
@@ -0,0 +1 @@
+rn_("ZQBEAAAGLRtyuhe7F7wXvRe+F78XwBcFAcsAAAQlHQUwHXFzEwQCoGAAABxucHI7MAAAAQAADQACACAaBgCqGgYAYwADsIAauwHvZ3N0OzAAAAEAAMgAAwCqEsUA6xkAAFUbAQA=")
\ No newline at end of file
diff --git a/api/search.index/2e18cfe45856.js b/api/search.index/2e18cfe45856.js
deleted file mode 100644
index e3966050a..000000000
--- a/api/search.index/2e18cfe45856.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQBCAAADPBdhsRGyEbMRtBG1EbYRtxH1AkAAAAO8EAFJDRLQGvAcYWV1RA5FDkYORw5vFkEXtxm4GUcaSBp6Gq0a3xoZG4MckBwrAqBgAAAYL3B0awOgAAAABERkbnQ=")
\ No newline at end of file
diff --git a/api/search.index/2e367b191e8a.js b/api/search.index/2e367b191e8a.js
deleted file mode 100644
index c45cf61d5..000000000
--- a/api/search.index/2e367b191e8a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUEAAM0bRhxHHAUBwAAAEDoWZhgBOxZkbwGBAqDQAAAcraEwAAAc3mFwpwEChqBQAAAYs7BwGsMAAaDAAAAcRTRBEPVKDQAAAQBhChoB9AAbArAgGDIEjmVz")
\ No newline at end of file
diff --git a/api/search.index/2ec7aa7e61b8.js b/api/search.index/2ec7aa7e61b8.js
new file mode 100644
index 000000000..d4f8338b1
--- /dev/null
+++ b/api/search.index/2ec7aa7e61b8.js
@@ -0,0 +1 @@
+rn_("JQBDAAAOGB1jSxhMGIUaIUEAACIXIxe6GW8AhaBAAAAY1qBwAAAbcrAgGowB7wGhBAUBwAAALw4dHh0fHScOHIcciBxhciMDA6AQAAAcILBQHGoAYmVwcwGlFgAA+wJheQ==")
\ No newline at end of file
diff --git a/api/search.index/2ee78d02b66b.js b/api/search.index/2ee78d02b66b.js
new file mode 100644
index 000000000..c78190673
--- /dev/null
+++ b/api/search.index/2ee78d02b66b.js
@@ -0,0 +1 @@
+rn_("BQHAAAADDBsAHRhhcwUBwwAAF9gc2RwSOBw5HGRzUwADoFAAABtqZm1u8rcWAACmADUAQAAAAfYMcGkKeg57DsgXdQFCAAAB6BoEJhxpc9QY1RjsGe0ZNht7G3wbZBwFAEIAAAJHHW08HSOHAqCAAAAdS2FrBQHAAAAAmQ4JQR1sd3MChKAAAAAbFgUEAvK9CgAAzhEVAEIAAAeAHG1vF0gYI4ECoDAAABm6YmtlAEMAAAhEHWKqFasVrBWtFa4VrxWwFb8DhqDQAAAdKpEBwA==")
\ No newline at end of file
diff --git a/api/search.index/2f58f1db4a09.js b/api/search.index/2f58f1db4a09.js
deleted file mode 100644
index 18188ec0d..000000000
--- a/api/search.index/2f58f1db4a09.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUEAAN0RixqMGjUBQwAAF+wbmhwA7xZmcyEWIhYjFiQWBQBAAAADxBtquhslAEMAAAGBHGV1GqUcphxjAQOgIAAAGxtpbHP1cRUAAEcC0QEBAAQB3wCFsAAQ2geAoBAAAA4vKUAE")
\ No newline at end of file
diff --git a/api/search.index/2faccccb2ae1.js b/api/search.index/2faccccb2ae1.js
deleted file mode 100644
index 5634ec2bc..000000000
--- a/api/search.index/2faccccb2ae1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQFBAAAjshCzEC8YAHkMZnPFEcYRxxHIEckRBQBBAAAlQBv5G/obd1EaE4cCoDAAABpqZXObhKAgAAAXvqCAAAAYcgEICQ==")
\ No newline at end of file
diff --git a/api/search.index/2ff1a01c4c0e.js b/api/search.index/2ff1a01c4c0e.js
deleted file mode 100644
index a7f4a036c..000000000
--- a/api/search.index/2ff1a01c4c0e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUoAAOAb4RviG+MbFQBFAAARBxtLHGl5GbkbGwKwkBwSAAFlaQUCRgAAISQbTxvJHAbpHAj1HGlzdOoZFQBBAAAUwRvCG22lGqYaEwQCoCAAABsGaXL3jRgAAAEAPgEBACkBMgAvAfsCY24xRQAAdRl2GXcZeBkFAcMAADOhGqIaoxqkGgV2GnBz8wDFAAiAGQGJDAAA")
\ No newline at end of file
diff --git a/api/search.index/2ffa1690a96d.js b/api/search.index/2ffa1690a96d.js
new file mode 100644
index 000000000..7894a9a01
--- /dev/null
+++ b/api/search.index/2ffa1690a96d.js
@@ -0,0 +1 @@
+rn_("BQHAAAAGHBwBpBpmaaUARQAABFUcZfAY8RgMGrwaFRsIHAwcRxxLHLMcGx0VAEMAADCtF64X5BflF3M7F2AX+wNvdXk=")
\ No newline at end of file
diff --git a/api/search.index/30e914e63a15.js b/api/search.index/30e914e63a15.js
new file mode 100644
index 000000000..62b0674b9
--- /dev/null
+++ b/api/search.index/30e914e63a15.js
@@ -0,0 +1 @@
+rn_("BQBDAAAGVx1kTR3zAgFvAYUWAAATAISgQAAAF8iwkBzzAAGgEAAAHLURQQDyzAwAAIgAIUYAABcYGBjtGwUAQgAAM5AbkRt2HJUcbK8YKwKwwB0mAAFjZisCsDAWsQABbW7rhKAwAAAYRgFABQ==")
\ No newline at end of file
diff --git a/api/search.index/30ee7966b4ca.js b/api/search.index/30ee7966b4ca.js
new file mode 100644
index 000000000..832398def
--- /dev/null
+++ b/api/search.index/30ee7966b4ca.js
@@ -0,0 +1 @@
+rn_("BQBLAAAGVx1kTR0bAqEwAAAdTGFzZQBEAAAJqBxw3RfeF98X4BfhF+IX4xdVAEAAAAgOG3RCDkMORA5FDtUX1hcFAcsAAAQlHQUwHXFz8wgBcDswAAABAAAGAAEAqhoGABUATQAABDYdZlMdVB0jAAOgEAAAGb6ggAAAHIVtc3QBQQ4AAFcDAoagcAAAGeKg8AAAHMAIqAb0khMAAAEAIAMBAPsCYWk=")
\ No newline at end of file
diff --git a/api/search.index/31e87706729d.js b/api/search.index/31e87706729d.js
new file mode 100644
index 000000000..73f974d79
--- /dev/null
+++ b/api/search.index/31e87706729d.js
@@ -0,0 +1 @@
+rn_("QUIAABMZIhkjGf4bYBxRQQAAuxq/GmEbYhuqHKscBQLAAAAXVRtWGxfqGusaBJ8aZmx0+wJlbysCoGAAABkZY3QzAAOgYAAAHLRhcnY6MAAAAQAAAAAADAAQAAAAeApNGE4YAxkEGcoZyxnxGvIaLxwwHNoc2xw=")
\ No newline at end of file
diff --git a/api/search.index/3248f1ef41d3.js b/api/search.index/3248f1ef41d3.js
deleted file mode 100644
index 9131b0d07..000000000
--- a/api/search.index/3248f1ef41d3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBDAAADCxxpghojBAKgcAAAHMZwdPTGFwAA4gABAAEAIUIAAHYX6BjQGQUAUgAABhEdZAIdFQBAAAAAHhxzaRZ1F2UARQAABXoccsAZtBq1GrYatxq4Grka84ECY2cVAEIAAAEgHGmvGhgbGwKwEBggAvRlbBsCoIAAAByvaXIlAE0AAAYMHWSoHKkc9xwFAcMAAANhHBBSGlMabnPzgQJsbQUBxAAAMUEb1BslHE0cBXQcZXL3CwCIoHAAABxnJogHOzAAAAEAACkAFABmDg0AMhcBADgXAQBLFwAAZhcAAG4XAwDfFwEA8RcAABMYAQBVGAAAyRgAANwYAAC/GQAAuhoCANIaAABTGwAA5BsAAD8cAABVHAAAWxwAAA==")
\ No newline at end of file
diff --git a/api/search.index/3255fd4c2a93.js b/api/search.index/3255fd4c2a93.js
deleted file mode 100644
index 4901b3a48..000000000
--- a/api/search.index/3255fd4c2a93.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAGeRwBrhszcQUBwAAAAuUaBEIcaW9HAoSGoDAAABvpoCAAAButoHAAABwwoDAAABvqwIgDKwKgYAAAGxxjdA==")
\ No newline at end of file
diff --git a/api/search.index/326c0c129e40.js b/api/search.index/326c0c129e40.js
new file mode 100644
index 000000000..5fce2fd49
--- /dev/null
+++ b/api/search.index/326c0c129e40.js
@@ -0,0 +1 @@
+rn_("BQBFAAAGCBxi+xcFAEcAABb3HPgcZgccE4MCoDAAABn4cHMbAqBwAAAbXmFlCQKhAAAAHOKgsAAAHKJhb0sDoEAAABvsoKAAABwsY3F0BQBJAAAG4Rx2XRsVAE0AAAZRHWQSHUAd8wABdAF7CgAABQHAAAAGuxwB7xszcQUBwAAAAiQbBIMcaW9HAoSGoDAAABwqoCAAABvuoHAAABxxoDAAABwrwIgDI4ECoGAAABtbY3RXHgCJoJAAABtcoPAAABzToUAAAB0JHJEWAWANAAA=")
\ No newline at end of file
diff --git a/api/search.index/328ca00cb618.js b/api/search.index/328ca00cb618.js
new file mode 100644
index 000000000..b87e481fd
--- /dev/null
+++ b/api/search.index/328ca00cb618.js
@@ -0,0 +1 @@
+rn_("BQBDAAADTBxpwRojBAKgcAAAHQlwdPQAGAAA5AABAAEAIUIAALAXJBkNGgUAUgAABlUdZEYdFQBAAAAAXxxzoRavF2UARQAABbwccv0Z8xr0GvUa9hr3Gvga84ECY2cVAEIAAAFhHGnuGlcbGwKwEBhcAvdlbBsCoIAAABzyaXIlAE0AAAZQHWTrHOwcOx0FAcMAAAOjHBCRGpIabnPzgQJsbQUBxAAAMYAbFRxmHI4cBbYcZXL3CwCIoHAAABypJogHOzAAAAEAACoAFACKDg4AbBcBAHIXAQCFFwAAoBcAAKgXAwAZGAEAKxgAAE8YAQCRGAAABRkAABgZAAD8GQAA+RoCABEbAACSGwAAJRwAAIAcAACWHAAAnRwAAA==")
\ No newline at end of file
diff --git a/api/search.index/3299d2c1fd12.js b/api/search.index/3299d2c1fd12.js
new file mode 100644
index 000000000..cc4d5f162
--- /dev/null
+++ b/api/search.index/3299d2c1fd12.js
@@ -0,0 +1 @@
+rn_("AQIBoHAAABoRZjswAAABAAA+AAMAYQ4AAIQSHgBvGB4AGwKgYAAAGQZpdSMAA6AwAAAXMaBAAAAc0GFyc/K9GAAAswI=")
\ No newline at end of file
diff --git a/api/search.index/32f4ee4a7d8c.js b/api/search.index/32f4ee4a7d8c.js
deleted file mode 100644
index 4c0683652..000000000
--- a/api/search.index/32f4ee4a7d8c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("UUMAAEMTRBNFE0YThhaHFgUBwAAADKIcCDgcZW4FAEoAABTHHMgcbaccFQBGAAAUaxxsHG1DHMMc84EDZnBzU4EDoCAAAB0BZWl1")
\ No newline at end of file
diff --git a/api/search.index/32f60632984e.js b/api/search.index/32f60632984e.js
deleted file mode 100644
index 00fa53d64..000000000
--- a/api/search.index/32f60632984e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAFTRMJuBlhbQUBwAAACbcZCnoaY2wFAcAAAAPeHBNcGl0abHUhSAAAbhyrHKwc84ICYW8FAEEAAAdOGmFhFvOBAml11wAAhqBgAAAa3KDAAAAa36EgAAAcg9EQAQFMDgAA")
\ No newline at end of file
diff --git a/api/search.index/335024037b64.js b/api/search.index/335024037b64.js
deleted file mode 100644
index 222b93d44..000000000
--- a/api/search.index/335024037b64.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBFAAAFnBxjQBxBHFUAQAAARAQYBRgGGAcYCBh0zwwxDdgY3hjeGd8ZQUUAAP8XABgBGAIYAxgFAEUAAAbXHGJqHBUAQQAABB0cZuoc6xwVAEIAAAQ+HGbuHO8c+wJhbyFFAAC2GQkbChvzAwNscHfz6RgAAHYB0AEFAEIAAARQG2OuGiOBAqAgAAAYCWVsIwADoPAAABz2oIAAABsLZWZy884MAAC2DwIA8wCFKIASOzAAAAEAAAYAAgCVCgAAXwwFABsCoKAAABrcZWk=")
\ No newline at end of file
diff --git a/api/search.index/336a977cc95e.js b/api/search.index/336a977cc95e.js
new file mode 100644
index 000000000..c95fb46c8
--- /dev/null
+++ b/api/search.index/336a977cc95e.js
@@ -0,0 +1 @@
+rn_("IUUAAH8bOhw7HAUBwAAADOUcCHkcZW4FAEoAABQKHQsdbeocFQBGAAAUrRyuHG2EHAYd8wCEIIASOzAAAAEAAIQAAwD+DAAArQ6CAJAaAAA=")
\ No newline at end of file
diff --git a/api/search.index/336dfe15f66a.js b/api/search.index/336dfe15f66a.js
deleted file mode 100644
index e6bd93d42..000000000
--- a/api/search.index/336dfe15f66a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHBAAAMBRwJdBpjcwUAQwAAAYEcZXUa8wgBbAG4FwAAMUMAANYZ1xkLG6obBQBHAAAMAR1hORwjAwOgIAAAHK2gYAAAGthydHYBSRwAAPsDaG9yJwQAiKCgAAAac7DgHLAAAaBwAAAc/aCgAAAZrqCQAAAY0KDQAAAcXxWEBwFkEwAA")
\ No newline at end of file
diff --git a/api/search.index/33722427de9f.js b/api/search.index/33722427de9f.js
new file mode 100644
index 000000000..016a0f17d
--- /dev/null
+++ b/api/search.index/33722427de9f.js
@@ -0,0 +1 @@
+rn_("MUMAABMaFBpKG+sbBQBHAAAMRR1hehwjAwOgIAAAHPCgYAAAGxdydHYBihwAAPsCaG8TAAOw4BzzAAGg0AAAHKFjZXQBlhMAAA==")
\ No newline at end of file
diff --git a/api/search.index/33ca81f487eb.js b/api/search.index/33ca81f487eb.js
deleted file mode 100644
index a5e1f7077..000000000
--- a/api/search.index/33ca81f487eb.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUgAAJ0coRyzHLocMUIAAMUb0xsHHBEcBQHAAAAMAB0N5hxhaA8Hh6CAAAAcvKCAAAAcxaFQAAAdCKCgAAAc8B4AHA==")
\ No newline at end of file
diff --git a/api/search.index/33d83cd7851f.js b/api/search.index/33d83cd7851f.js
deleted file mode 100644
index ebcfee093..000000000
--- a/api/search.index/33d83cd7851f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQIBoDAAABgyajswAAABAADEAAIA3wwAANkPwwABAAGAF14AEAFzOjAAAAEAAAAAABIAEAAAAH8MgAzoFukWiReKF+cX6BfpF1QYwxh9GcoZZRpzGoUaqRryG/0c+wJkbg==")
\ No newline at end of file
diff --git a/api/search.index/340909233085.js b/api/search.index/340909233085.js
deleted file mode 100644
index 21002077d..000000000
--- a/api/search.index/340909233085.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHSBoDtRllcAUARQAAB2ccc7waKwKgMAAAGY9tdAGFA6BAAAAbv6FAAAAc/qCAAAAcf2NlbBsCsGAbtQABbnTzAANhZXMBBx0AAA==")
\ No newline at end of file
diff --git a/api/search.index/34750d80bb67.js b/api/search.index/34750d80bb67.js
new file mode 100644
index 000000000..4b19c8123
--- /dev/null
+++ b/api/search.index/34750d80bb67.js
@@ -0,0 +1 @@
+rn_("BQHAAAAH5xwiBxgIGNYab3kjAgKwYBoAAh5sdDswAAABAAAGAAMA6hABAAMSAwCnFwAAIwECoGAAAB1SZGn3egoAABgScgAiAAEAGwABAAUBwAAAAwwbAB0YYXMFAcMAABfYHNkcEjgcORxkc1MBA6BQAAAbamZtbvK3FgAApgAFAcAAAAPfGQC2FmFzBQHAAAAEqBpQ1xfYF9kX2hfbF9wXaXMFAcMAABemHKccEmgbaRtkc/MEhCAwBDowAAABAAAAAAAHABAAAAD5EH8SgBKBEoISgxKFHDkdBQBAAAAGTx1kOB0rAqBAAAAXXGlzBQHDAAAX/Bv9GxJpGGoYaHO3AACFoEAAAB0VsDAOYAm+IFCCOjAAAAEAAAAAAAcAEAAAAEgE7QdODgEYphynHNgc2RxlBEEAABYrGiwaC1scDHscBDgYDHwcZm1ydXfqDOsM7AztDC0NLg0vDXuEoBAAABDWEYEA")
\ No newline at end of file
diff --git a/api/search.index/3498d8350a32.js b/api/search.index/3498d8350a32.js
deleted file mode 100644
index 526a266f6..000000000
--- a/api/search.index/3498d8350a32.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQFAAAAFqhkQWRZaFmVzPhM/EyFFAADNG0YcRxz7AmpwBQHBAAAEOxwM3Bxpb/sCZW8VAEIAAAZyHHaYHJkcBQBEAAAnyxzaHNscc0UcM4IDsAAc1QABaW5z+wJhcg==")
\ No newline at end of file
diff --git a/api/search.index/349d7916669b.js b/api/search.index/349d7916669b.js
new file mode 100644
index 000000000..d637296b3
--- /dev/null
+++ b/api/search.index/349d7916669b.js
@@ -0,0 +1 @@
+rn_("dQBAAAAHZRtvZha/GcAZwRnCGcMZxBnFGQUBwQAABG4cFcMaSRxxcwUBywAABCUdBTAdcXNhRQAAlBqVGpYalxqYGpkamhoFAFEAAAZXHWRNHWcOAIigwAAAHHKwQBioAAGgcAAAGsIZoQM7MAAAAQAAJwALAPkMAADPEAAA3xABAAARAADtEQMAURgGAM0YBgAgGgYAqhoGANgaAADmGgEA")
\ No newline at end of file
diff --git a/api/search.index/349e483005bc.js b/api/search.index/349e483005bc.js
new file mode 100644
index 000000000..e02600735
--- /dev/null
+++ b/api/search.index/349e483005bc.js
@@ -0,0 +1 @@
+rn_("BQBBAAAGTx1kOB0TiAKgQAAAHRVtbwUBQAAABrscAe8bM3FfHBUARAAAA3MbbA8ZcRwxSAAA4BzkHPYc/RwxQgAABhwUHEgcUhwFAcAAAAxEHQ0qHWFoDweHoIAAABz/oIAAAB0IoVAAAB1MoKAAAB00HgAc84ECcHYrAqAgAAAcxG9yBQHAAAACJBsU9BeDHGlvBQHBAAAMbRwDxRhtboFGAACdGJ4YvhrMGiIbLhtxGwocdRw3VACMsHAcxQANoDAAABwqoCAAABvusBAZ5gMioEAAABgxoDAAABwroIAAAByv1qkTOjAAAAEAAAAAABcAEAAAAOgM6QwZDRoNGw0cDR0NHg0fDSANIQ0iDYATjBOdFqEWphavF/0X/hcdGbcZuBmgGnUARQAABbwccv0Z8xr0GvUa9hr3Gvgabhv7AmNnBQBDAAAGVx1kTR3zAAFvAYUWAAD7A2xvcg==")
\ No newline at end of file
diff --git a/api/search.index/356e5bc2bd0b.js b/api/search.index/356e5bc2bd0b.js
deleted file mode 100644
index 7ad2a76f5..000000000
--- a/api/search.index/356e5bc2bd0b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAABEYRdiF2MXZBdlF3LICBUAQwAAIIcXyxrMGnPRGdIZFQFAAAAEOhwLHhxibX0Ofg5rhLBAEaUGNaAgAAAWHAwQAjsDoMAAAByOZXN0")
\ No newline at end of file
diff --git a/api/search.index/36329a491bb1.js b/api/search.index/36329a491bb1.js
new file mode 100644
index 000000000..f8057e03b
--- /dev/null
+++ b/api/search.index/36329a491bb1.js
@@ -0,0 +1 @@
+rn_("cUAAAGYWvxnAGcEZwhnDGcQZxRkFAcEAAARuHBXDGkkccXMFAcsAAAQlHQUwHXFzYUUAAJQalRqWGpcamBqZGpoaJwcCh6DAAAAccrBAGKgAAaBwAAAawhGhAzswAAABAAAkAAgA3xABAO0RAwBRGAYAzRgGACAaBgCqGgYA2BoAAOYaAQAbAqAwAAAcx2Fl")
\ No newline at end of file
diff --git a/api/search.index/363da7995c6a.js b/api/search.index/363da7995c6a.js
deleted file mode 100644
index 34d0c2ecc..000000000
--- a/api/search.index/363da7995c6a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBFAAABSxxpuRsbArCQHBIAAWVpIUUAAMwZzRkoG/OFAnN2BQHAAAAFLBwHORtmdAUAQwAAEaIYoxhpsxg7A6AgAAAcWWxudQUBwAAAEqcZqBkUKRyKHGl0BQHAAAAvyxzaHNscJ80bRhxHHGFyIUMAAGUYtRu2GwUAQQAABsQcdN8bpwMAhqCgAAAczqBAAAAXAjSQAjowAAABAAAAAAAOABAAAADSENMQbRbdGt4a7BrtGsEbwhtSHFMcaxxsHMccyBwBggOhUAAAHQigIAAAHBGggAAAHLpkdXcrAqAgAAAcgm9yQwQDoGAAABrvsHAcgwANYmVw824WAAAMAwEABQBGAAAQOhtWHHLpGvMCAXD3bBYAADgCAQAMAwEADQDAAPsCY3R3AQCFoHAAABfkgUAMAXUBAAA=")
\ No newline at end of file
diff --git a/api/search.index/368333e4b28d.js b/api/search.index/368333e4b28d.js
new file mode 100644
index 000000000..e63437d6b
--- /dev/null
+++ b/api/search.index/368333e4b28d.js
@@ -0,0 +1 @@
+rn_("BQBBAAAWKB0pHWVbDnUAQAAAFJMclBxtmg5jGGQYZRiTGJQYXBxdHAUBxwAABx0dBQMdZnQTBAKAE4oAE+NkcjswAAABAABxAQYA8RACABUSYQCaFgEAxBZaAC0aVwCTG1cA24SgAAAAF/YNIAA=")
\ No newline at end of file
diff --git a/api/search.index/368d6909936c.js b/api/search.index/368d6909936c.js
deleted file mode 100644
index c2328384e..000000000
--- a/api/search.index/368d6909936c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAA11RtOHLQctRwMvRxhafMAAWb24hcAAFgDjACQAEkAJwDzAwFyAekaAAAFAcEAAAThHAXsHHFz8wYBcjowAAABAAAAAAAJABAAAADiGMQZxRnGGccZZxpoGsUaxhpmHPsCcHYVAEgAACCVGZYZQhtz9RoVHEFCAAD/FwAYARgCGAMY+wJmc/sCZW8lAEAAAAQdHGYPHOoc6xwrAqAQAAAad3JzBQBRAAAGEx1kCR0TAwKggAAAGyZkcwHYDAAAxQBBAAAEPhxmphGnEagRqRGPGJAYuRmhGqIaoxqkGu4c7xwFAEoAAAYOHWT/HCFIAACIHIkcvxwhQwAAzxvQG0gc+wNwdHUjBAKgYAAAHH5tcwG4HAAAE4ECsCAasgABaW77AnJ09wAAhaAAAAAKbgFIA/I9BAAA5Rc=")
\ No newline at end of file
diff --git a/api/search.index/3710969a8f47.js b/api/search.index/3710969a8f47.js
new file mode 100644
index 000000000..7fcecf3e9
--- /dev/null
+++ b/api/search.index/3710969a8f47.js
@@ -0,0 +1 @@
+rn_("MUkAANsa3BrdGt4aUUMAAHUTdhN3E3gTvha/FgUBwAAADOUcCHkcZW4FAEoAABQKHQsdbeocFQBGAAAUrRyuHG2EHAYd84EDZnBzWwOgIAAAHUVlaXUxQwAAkBuRG3YclRzjAISwoBqKAAGAKAg6MAAAAQAAAAAAEQAQAAAAcgxzDHQMdQx2DHcMeAx5DHoMXA7bEOMQmBYVGBYYrxjFGN8c")
\ No newline at end of file
diff --git a/api/search.index/380e6bb8ab2e.js b/api/search.index/380e6bb8ab2e.js
deleted file mode 100644
index 6ee81aa46..000000000
--- a/api/search.index/380e6bb8ab2e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQADoEAAABgLsGAb7gABgBeHNEABZnBzOzAAAAEAABAABgByFwAAjBkAANEZAQCxGgAA+hoFAEUbBQAbAqAAAAAOTHR2")
\ No newline at end of file
diff --git a/api/search.index/381e1faa5e2f.js b/api/search.index/381e1faa5e2f.js
new file mode 100644
index 000000000..f52c257f9
--- /dev/null
+++ b/api/search.index/381e1faa5e2f.js
@@ -0,0 +1 @@
+rn_("ZQBEAAAGLRtyuhe7F7wXvRe+F78XwBcBAAE2MppJG7Fw9HwKAAAPDToAbAAFAcAAAAf7HAFQHGFvBQBCAAAzohaxF7IX9RxwKBwFAcQAAAIyHQEuHWFvI4QCoAAAABzGZGbzAAFl8rUKAADpEQUBwAAADT4dBIkabW4FAcQAAAYjHQMTHW90awOg0AAAHRhhaG9nbACMoIAAABqToDAAABxzsIAauwHvoYAAAB1ToEAAAByxsIAdGQABbpgXOzAAAAEAAOYAFABBBAAAwQcLAJ0OAQCqEsUAqRUAAIYXAABLGAEADBkAABYZAADrGQAAhRoAALEaAAAHGwAAJhsAAFUbAQD4GwAACRwAAG8cAACjHAAA/hwAABMAAmymx8Gv6WVwOjAAAAEAAAAAAAsAEAAAAMwK1BA/GEAYQRhCGEMYRBggGyEbahzMHA==")
\ No newline at end of file
diff --git a/api/search.index/38344436999b.js b/api/search.index/38344436999b.js
new file mode 100644
index 000000000..19c271caf
--- /dev/null
+++ b/api/search.index/38344436999b.js
@@ -0,0 +1 @@
+rn_("BQHAAAAHoRwSjhMGGW95cUQAAD8bQBtBG0IbihuLG4wbjRtXAADFsGAZAwABoEAAABfNoKAAABzbAAggGjowAAABAAAAAAAIABAAAADQCtEK0grVDNYM1wz/EOgR7BcFAEIAABJnHEQdYasK+wJrdA==")
\ No newline at end of file
diff --git a/api/search.index/38620432296c.js b/api/search.index/38620432296c.js
deleted file mode 100644
index e36c11653..000000000
--- a/api/search.index/38620432296c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQJCAAAZ5BzlHAe9HBiUHJUcaXBzLBdBQAAAeApUFlUW/hcfG3UAQAAANn0aBhxxHNccYkwT7RbuFmQY7BntGYkaahzzBAFyAa4QAAAFAcAAAATAHAKqEW95BQHAAAADdhoEgBxhb2FGAAANGw4bDxsQGxEbEhsTGxUARAAABg0dZM8c/BzzAgJiaQGqHAAAIUMAAJUaUBvmGwUBRQAACS8cFeEa4hpkczoX+wJhb5cBAIagwAAAG+igcAAAHJOgQAAAFh80AUT0OBYAAEcDLwFsAAUAQwAAEdEY0hhlLg4VAEEAAAQdHGbqHOsctQBCAAAEPhxmphGnEagRqRGPGJAYoRqiGqMapBruHO8c+wJhbyUAQwAAGHwaaBxnrhkWGxcbIUcAADgXORcTGCFFAAC2GQkbChtlAEEAAAa/F2KaCpsKNw04DTkNOg07DWUAQwAABvkcZOoW6xbsFmMY6xnKHPYcKwKg4AAAHI9 [...]
\ No newline at end of file
diff --git a/api/search.index/3897fc274efe.js b/api/search.index/3897fc274efe.js
new file mode 100644
index 000000000..57d6c0542
--- /dev/null
+++ b/api/search.index/3897fc274efe.js
@@ -0,0 +1 @@
+rn_("BQHAAAABkBiSTBtNG04bTxtQG1EbUhtZHFoc0RxpdAUBQwAABgEdAp8cYnIXHCOIAqBAAAAcV2ZzBQBEAAAAOBtz0xrzAwJmcPSlFwAAAQCIAG8Cm4SgQAAAFp+gUAAAGhAAQEk=")
\ No newline at end of file
diff --git a/api/search.index/38d0f1cafc69.js b/api/search.index/38d0f1cafc69.js
deleted file mode 100644
index f57d5759f..000000000
--- a/api/search.index/38d0f1cafc69.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("VQBFAAAIaRxncRZyFnMWdBaPF5AXGwKgAAAAFnVjZ0UBQgAAJLEbsht/HAXoGmN3PxdAFx0YHhghG2sDoEAAABmLZWlv")
\ No newline at end of file
diff --git a/api/search.index/38ee021f0c9c.js b/api/search.index/38ee021f0c9c.js
deleted file mode 100644
index 43ba600de..000000000
--- a/api/search.index/38ee021f0c9c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHHAAAERRwCmRxpbgUBwAAAB18cElwTyhhveQUAQAAACnsaaSwcBQHAAAAVxxjIGAXGGGFyAQAAOzAAAAEAABIACQB7GAEAyhsAANUbAAD8GwcACRwAAA0cAQBOHAAAexwAALQcAQAjAQKgEAAAGtx2efTNGwAAeQABACwAxQNBAAAFKBwFLxcWsByxHBWgGiccYWNlc7sKpRE7FoAWJBclF9oXjxooHCocKxyMHAgdSwSwABY6AiygUAAAF+SgcAAAG7BkbW92dQBEAAASwxrEGmkAGwEbAhsDG0sbTBtNG04bAQACoNAAABytoTAAABzeYXABXxMAABsDoDAAABeOoBAAABvrZG1zBQBGAAAQOhtWHHLpGvMDAXABbBYAABsCoEAAABizYW8FAEMAAAYTHWQJHfMBAW8BTRYAAAUAQgAAB58ccHgW+wJibPdfAMugQAAAF5NATTAbOjAAAAEAAAAAABMAEAAAAJg [...]
\ No newline at end of file
diff --git a/api/search.index/38f73828ff4c.js b/api/search.index/38f73828ff4c.js
new file mode 100644
index 000000000..1f6450e2c
--- /dev/null
+++ b/api/search.index/38f73828ff4c.js
@@ -0,0 +1 @@
+rn_("gUIAAFcOjhNJF48XkBcGGREZuBp4GxUBRwAAB80cBZ4cYmYjGyodBQBBAAAGTx1kOB0TiwKgQAAAHRVtbysCoGAAAByhbHQFAsAAADQhHCIcIxwkHDDZEA4dHh0fHQiIGm5yc2UAQAAAByUbcjQXNRc2FzcXOBc5FzoXBQHBAAAEGBsFdBtxc/ODAnJzvwOGoHAAAB05EUFB")
\ No newline at end of file
diff --git a/api/search.index/3949563bf157.js b/api/search.index/3949563bf157.js
deleted file mode 100644
index 288488c44..000000000
--- a/api/search.index/3949563bf157.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBKAAAY1RzWHHe3GycAAIawYBnuAAGgsAAAHBqgwAAAHDqgQAAAF/6gwAAAHDsgERk7MAAAAQAABgACAMkMAwAMDQIA")
\ No newline at end of file
diff --git a/api/search.index/395311d24744.js b/api/search.index/395311d24744.js
new file mode 100644
index 000000000..0bbd1292b
--- /dev/null
+++ b/api/search.index/395311d24744.js
@@ -0,0 +1 @@
+rn_("NQBCAAAGUR1kHRrdHBIdQB0rAqBgAAAak2Z0FQBEAAAEBBxlgxcSGYuEsGAcZwDdsAAM5wAxoAAAAAjNZAEABQBFAAAGCBxi+xcFAEcAABb3HPgcZgccE4MCoDAAABn4cHMbAqBwAAAbXmFlCQKhAAAAHOKgsAAAHKJhb0sDoEAAABvsoKAAABwsY3F0BQBJAAAG4Rx2XRsFAcAAAAa7HAHvGzNxBQHAAAACJBsEgxxpb0cChIagMAAAHCqgIAAAG+6gcAAAHHGgMAAAHCvAiAMjgQKgYAAAG1tjdBcPAoigkAAAG1yg8AAAHNOhQAAAHQkMkRYBYA0AAPsDZXV5")
\ No newline at end of file
diff --git a/api/search.index/398542bd65f2.js b/api/search.index/398542bd65f2.js
new file mode 100644
index 000000000..13301f5f4
--- /dev/null
+++ b/api/search.index/398542bd65f2.js
@@ -0,0 +1 @@
+rn_("MUYAACEcIhwjHCQcFQBRAAAGUR1kEh1AHRsCoAAAABDJYW9hRgAAvBoIHAwcRxxLHLMcGx0TAAOgUAAAHN+gkAAAGhJiY3A6MAAAAQAAAAAAJwAQAAAA2QzaDNsM3AzdDN4M3wzgDOEM4gx+E8AWwRYnFygXcBd/F/sXBBhJGEoYoBimGOcY+hj7GBAZHhofGikaKhrIGicbKRt/GzocOxyBHIIcrBwFAFQAAAZSHWRDHQUASwAABlYdZEgdGwKgsAAAHEVhbwGDAqCQAAAcwqEQAAAdIWl1GwKwUBiVAtphZTcOAIigsAAAHAGwIBdKAAGgQAAAF2go8AU7MAAAAQAAFAAFAO0IAACSChAA2BAAAOQQAAD5EQAAW4SgEAAAHUuwQBi9ArOQAEQBAQKwYB0oAAGgcAAAGhFlZjswAAABAABJAAoAzQoCANMMAQBbDgAAYQ4AAIQSHgBsGAAAbxgeAOAZAQDfGgAAaBw [...]
\ No newline at end of file
diff --git a/api/search.index/39b57cb0f44e.js b/api/search.index/39b57cb0f44e.js
new file mode 100644
index 000000000..b26bb2330
--- /dev/null
+++ b/api/search.index/39b57cb0f44e.js
@@ -0,0 +1 @@
+rn_("BQHAAAASthicHBmlHDEdaW8TAAOwMBnbAvmwMBncAAFmaXA6MAAAAQAAAAAADwAQAAAAiBYSGBMY/hgFGgYaBhsOGzUcdxx4HL4cwBzKHMscAh0=")
\ No newline at end of file
diff --git a/api/search.index/39c86a74f1fe.js b/api/search.index/39c86a74f1fe.js
deleted file mode 100644
index 1c21d1469..000000000
--- a/api/search.index/39c86a74f1fe.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAUkhoMHAPlG2VpBQHAAAABAx1GbhdvF3AXcRc/HGRlkUEAAH8MgAznF+gX6RfKGXMahRqpGv0cBQBEAAAD5xpuvRHnAgCGoGAAABmMsGAZjQABMJECOjAAAAEAAAAAAB4AEAAAAFYTghY1F0MX6xfsF+0X7hfvF/AXDBiCGIMYhBiFGIYYhxiYGJkYrRmvGbAZyRrKGvcaPBs9G9IbBRwjHPgc")
\ No newline at end of file
diff --git a/api/search.index/3a398f5722ef.js b/api/search.index/3a398f5722ef.js
new file mode 100644
index 000000000..38838a794
--- /dev/null
+++ b/api/search.index/3a398f5722ef.js
@@ -0,0 +1 @@
+rn_("BQHBAAAEJR0FMB1xc/MBAXI7MAAAAQAAIgANAHQWDQAOGAMArhgAAPwYAQAeGQAA5xkAAAEaAwASGgAAphoBAAQbAQB6GwAAWBwAAKgcAAA=")
\ No newline at end of file
diff --git a/api/search.index/3a3aa60fa500.js b/api/search.index/3a3aa60fa500.js
new file mode 100644
index 000000000..7b15b818d
--- /dev/null
+++ b/api/search.index/3a3aa60fa500.js
@@ -0,0 +1 @@
+rn_("IUUAAHAXSRhKGBUARgAABlYdZCEdSB3zgQJldxUAQgAAFGIcuhx1dxcVGTFFAAAsGS0ZLxt3G7uEsAAZ3wEtACAL")
\ No newline at end of file
diff --git a/api/search.index/3a7c86236934.js b/api/search.index/3a7c86236934.js
deleted file mode 100644
index 07750b4cd..000000000
--- a/api/search.index/3a7c86236934.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBNAAAE8hxmDx0QHSOGA6AQAAAZgaCAAAAcRG1zdAUASgAAFMccyBxtpxwVAEYAABRrHGwcbUMcwxzzhgJmcEsDoDAAABNQoEAAABbnZHBzFwQAh7BwGKIAAaAwAAAOJ7AwEeAGe6CgAAAasKDQAAAb7SXACgEzBAAA")
\ No newline at end of file
diff --git a/api/search.index/3aaa8c0a8280.js b/api/search.index/3aaa8c0a8280.js
new file mode 100644
index 000000000..a2a0b1d54
--- /dev/null
+++ b/api/search.index/3aaa8c0a8280.js
@@ -0,0 +1 @@
+rn_("FQBFAAAF3xxjgRyCHFUAQAAAVD8YQBhBGEIYQxhEGHTwDFMNFBkaGRsaHBpRRQAAORg6GDsYPBg9GD4YBQBFAAAGGx1irBwVAEEAAAReHGYuHS8dFQBCAAAEfxxmMh0zHfsCYW8hRQAA8xlIG0kb8wMDbHB38yUZAAB5AdIBBQBCAAAEjxtj7RojgQKgIAAAGEVlbCMAA6DwAAAdOqCAAAAbSmVmcvPvDAAA1w8CAPMAhSiAEjswAAABAAAHAAIArgoAAHwMBgAbAqCgAAAbG2Vp")
\ No newline at end of file
diff --git a/api/search.index/3af2013f494f.js b/api/search.index/3af2013f494f.js
new file mode 100644
index 000000000..cd51f69fb
--- /dev/null
+++ b/api/search.index/3af2013f494f.js
@@ -0,0 +1 @@
+rn_("MUoAACEcIhwjHCQcFQBFAAARRhuMHGm2GfobGwKwkBxTAAFlaQUCRgAAIWMbjhsMHQYtHQg5HWlzdCcaFQBBAAAUAhwDHG3kGuUaEwQCoCAAABtFaXL3yRgAAAEAPwEBACsBMgAyAfsCY24xRQAAshmzGbQZtRkFAcMAADPgGuEa4hrjGgW1GnBz8wDFAAiAGQGoDAAA")
\ No newline at end of file
diff --git a/api/search.index/3b0ce88c5b6a.js b/api/search.index/3b0ce88c5b6a.js
new file mode 100644
index 000000000..f15d2d659
--- /dev/null
+++ b/api/search.index/3b0ce88c5b6a.js
@@ -0,0 +1 @@
+rn_("BQBBAAAUHBsdG225GfMCAWnysRgAAAEAFQBBAAAUkxyUHG1cHF0c8wcBafVHGwAANgABAA8BbQAFAcQAAAG3Ggr1HGlu+wNjb3A1AEMAAAHPHGl9HOYc8RwcHROIAqAwAAAcfnN0BQHAAAAKbxwHGhthaQUBwAAABfEZBrYaY2wVAEUAAAY9HWQNHTodE4MDoMAAAByqoDAAABztZm5zZyoAi7BgGbcAAaBgAAAZ8qEAAAAcq7CAGuYAAaDgAAAcxKAwAAAXSeS4BzswAAABAABAABEAwQoHAO4MAAAwDSIAlRgAABcZAAC9GQAAbxsAADwcAABFHAAAthwAALwcAAC/HAAANx0AAD0dAABJHQEATh0EAFUdAgBFAkAAAAaPGhThEG0WGvwa/Rphb3a5CvcMZA0yFzMYJQBAAAAFrxhjXQ6lDqYOBQHBAAAAAxEhsBzuHO8cZW/7hBEIBA==")
\ No newline at end of file
diff --git a/api/search.index/3b18c1948bc0.js b/api/search.index/3b18c1948bc0.js
deleted file mode 100644
index 789dd7463..000000000
--- a/api/search.index/3b18c1948bc0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLGAAAByRwG6RwI9Rxpc3QjhgKgQAAAHFdjbgUATwAABgsdZPQcBQBJAAAG8xxkthwFAEwAAAYGHWToHAUATAAABgUdZOcc+wJhafODA21udCsDoGAAABxzoNAAABz+bG1uFQFFAAAGyRsIbRxid8MXxBf7A2FvdQ==")
\ No newline at end of file
diff --git a/api/search.index/3b71634e64de.js b/api/search.index/3b71634e64de.js
deleted file mode 100644
index b6283585b..000000000
--- a/api/search.index/3b71634e64de.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBRAAAGEh1kBB0xRAAAJRgmGMsZdBoFAEIAAAYRHWQCHfMAAW0BnRAAAAUBwAAAEX4YfxgI0xxlb3FBAABWFlcW5RfmF6YZrBkHG0scBQBKAAAGCh1k8RwhRAAA1xi9Gx8cZQBEAAAGDB1kshmzGZoamxqoHKkc9xxn8wCMoDAAABhUoMAAABzdoCAAABh9sDAayAHztikXOjAAAAEAAAAAACgAEAAAANkM0hGBFoMWihaLFq8XsBfAF9MXXRheGJsYnBidGJ4YnxigGKEY5Rh5GbEZgRqRGtMaHRslG7kb1xvYG9kb2hsSHBMcGhwkHDscTxxQHFgcnhw=")
\ No newline at end of file
diff --git a/api/search.index/3bb58a3e2383.js b/api/search.index/3bb58a3e2383.js
deleted file mode 100644
index cd799b6d4..000000000
--- a/api/search.index/3bb58a3e2383.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBGAAAFfRxyzhoxRwAAjxoqHCscjBz1AEYAAAnTHHLAF5sYnBidGJ4YnxigGKEYkRrXG9gb2RvaG08cUBxYHAUBwAAAAa8QAnkaZXljAAOwYBwEAPVkdHb36hYAAAEAAQB3AYgB3wIsAAUBwAAAUusX7BftF+4X7xfwF1TqGOsY7BjtGO4Y7xhrdgUASwAAGNUc1hx3txv7A2xwdHMAhKAwAAATSyFIADswAAABAAANAAUAPgQAANcHAwCoEAAA0BAAAHMSBgA=")
\ No newline at end of file
diff --git a/api/search.index/3be2e72f0a5b.js b/api/search.index/3be2e72f0a5b.js
deleted file mode 100644
index d33087fb7..000000000
--- a/api/search.index/3be2e72f0a5b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQADoEAAABx3sEAa7AABoAAAABeRZm1zOzAAAAEAABsADQDaEAAAThIAADoWAAASFw4AWhgAAFwYAABmGAAAlhoAACQbAABPGwAAOBwAAMkcAAD6HAEA")
\ No newline at end of file
diff --git a/api/search.index/3c19439b040e.js b/api/search.index/3c19439b040e.js
deleted file mode 100644
index d6ff9c0c6..000000000
--- a/api/search.index/3c19439b040e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBIAAATpRymHGyJGYoZMUIAAHwXfRd+F38XBQHAAAAHuBwBDxxhbwUBxAAAAu4cAeocYW8jhQKgAAAAHIRkZgUBxAAABt8cA9Acb3QbAqDgAAAc+mhvNwGEh6AwAAAcMqGAAAAdD6BAAAAcb6BQAAAchSyIA1sDoNAAABz7bG11BQHEAAAG4BwD0RxvdO8AhaDAAAAbMqCwAAAa9oFACQ==")
\ No newline at end of file
diff --git a/api/search.index/3c1fca2f13df.js b/api/search.index/3c1fca2f13df.js
deleted file mode 100644
index 2c615636a..000000000
--- a/api/search.index/3c1fca2f13df.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUIAAF4XXxdgFxUARQAABZwcY0AcQRwFAEkAAAbXHGJqHFOFA6AAAAAY2GZzd1MAA7AwGIECsGRoafIvDgAAJwo=")
\ No newline at end of file
diff --git a/api/search.index/3dd0b248809b.js b/api/search.index/3dd0b248809b.js
new file mode 100644
index 000000000..4d9bc536e
--- /dev/null
+++ b/api/search.index/3dd0b248809b.js
@@ -0,0 +1 @@
+rn_("BQBHAAAYGR0aHXf4GwUBwAAAlUwbTRtOG08bUBtRG1IbWRxaHNEcBroabnQVAEQAAASgHGUyGzMbBQHGAAAHHR0FAx1mdJMAhLDQHOgAAaBQAAAdTjUAAAHnCAAAJQBEAAAGUR1kHRoSHUAdtwQAh7AwEncKMoATigAT47AAF4wAAYoBBzswAAABAAB7AQwA4gcAAI8KAADxEAIAFRJhAJoWAQDEFloA5BkBAC0aVwCTG1cAIRwDAO0cAAA1HQAA")
\ No newline at end of file
diff --git a/api/search.index/3ddb6ff2603e.js b/api/search.index/3ddb6ff2603e.js
deleted file mode 100644
index 04b3788b4..000000000
--- a/api/search.index/3ddb6ff2603e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAABVBiSDRsOGw8bEBsRGxIbExsYHBkcjxxpdAUBQwAABr4cAl0cYnLWGyOIAqBAAAAcFmZzBQBEAAAA+RpzlBrzAwJmcPRrFwAAAQCIAGoCm4SgQAAAFmegUAAAGdMAQEk=")
\ No newline at end of file
diff --git a/api/search.index/3ddd633a2d62.js b/api/search.index/3ddd633a2d62.js
deleted file mode 100644
index 9d6db7e9f..000000000
--- a/api/search.index/3ddd633a2d62.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUMAAFsTIRfIF5IZFQBFAAAIcxxjZBrpHAUAQwAACpkcd7IXBQHAAAAl2BfZF8IYAWkYaXVLA7AgGGsADrBgF8gBymJydFuEoEAAABwioCAAAByOAUBBBQBBAAAU3RreGm18GfMCAWnydRgAAAEAFQBBAAAUUhxTHG0bHBwc8wcBafUIGwAANgABAA0BawBFAEEAAAR3HGYkG08byRz6HPscEwaEsCAYdwABoGAAABzpoIAAABz1AAEHAeoZAAAFAcMAABUYHBkcBnsabnQFAcAAABP4F9QaG+0b8BtjcSUAQQAAFMEbwhtteBqlGqYaEwSEoKAAAByyoCAAABsGoKAAAByYACEROjAAAAEAAAAAAAcAEAAAALEXjRiOGMwZzRn2GigbVxy3PwCKsOAclAABNOEcOzAAAAEAADIAFgBnDAYAeQwAALQQAADKEAAAvxEBAEgSAgAlFgAAhxcAAJQXBgCtFwEA6hcAACs [...]
\ No newline at end of file
diff --git a/api/search.index/3e06e049610e.js b/api/search.index/3e06e049610e.js
new file mode 100644
index 000000000..82332e196
--- /dev/null
+++ b/api/search.index/3e06e049610e.js
@@ -0,0 +1 @@
+rn_("FQBIAAAGUh1kBB1DHSsCoHAAABmxZW0bA6BgAAAbH6CgAAAa6W1wcjFDAADgGeEZ3xpoHAUBwAAAApwcCTEdaW8TBwKgMAAAHNRmafc1HAAAQgABAEYADAABADcA+wJhchUBQgAAB80cBZ4cYmYjGyodIUUAAA4dHh0fHSUAQAAAAzQcaRAcERyJHCFCAAD+Gf8ZnxwxQQAA/hr/GgAbzxwFAcAAABUNHAEdAjMcdXn3AAGFgA1hABABAgEHOjAAAAEAAAAAAAwAEAAAAAYY6BjpGOoY6xjsGKkaNxsXHH0c5hzxHBwd+wNlbG8FAEQAAAQIGW8zFwUBwAAAAI4XC2McbnAbAqAgAAAYM2F1BQBCAAAGVR1kRh01AEEAABCMF40XcyEcIhwjHCQcIUMAAMQY/xsYHfsCdHoFAEYAAAW/HHINGzFHAADOGmscbBzOHPMDAmZsOzAAAAEAAAcAAgD6EAAAoxIGAAUBQQA [...]
\ No newline at end of file
diff --git a/api/search.index/3e64d7015431.js b/api/search.index/3e64d7015431.js
new file mode 100644
index 000000000..52f636bd8
--- /dev/null
+++ b/api/search.index/3e64d7015431.js
@@ -0,0 +1 @@
+rn_("BQHAAAAWihqLGgUHHWZoIwACoHAAABodaXQBIBwAAAUARgAAEHkblxxyKBsxQAAA2xrcGt0a3hoFAEoAAAa0HHbaHAUARQAADEUdYXocI4ECoKAAAByKYXMlAEAAABPGF8cXaQkYChj5GEFCAADuEO8QhBZFG/AcBQHDAAAG9RwAxRdtc7UBQQAAFAIcAxwAgxZtc14ODxIQEhESEhITEhQSChkLGbca5BrlGgUBwAAABQsYEsMXxBd1eecuAMqgwAAAHUWgcAAAGLCwYBgMAwvAQKgbOzAAAAEAACsADgDJCgIAtQwWAMoQAwCUEwEA6xcAAMkYAQAJGgEANRsAAGcbAADsGwAAehwAAIocAACZHAAA8hwAADsDoCAAABtbYWVvJQBCAAAFrxhjXQ6lDqYOKwKhEAAAHQdhdQUAQQAADCAccg8J5woAiaDAAAAdTKCQAAAbD6AAAAAKt6AwAAAdBw2wBzowAAABAAA [...]
\ No newline at end of file
diff --git a/api/search.index/3e7428b2c7dc.js b/api/search.index/3e7428b2c7dc.js
deleted file mode 100644
index 724a88161..000000000
--- a/api/search.index/3e7428b2c7dc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUMAANYZ1xkLG6obBQBHAAAMAR1hORwjAwOgIAAAHK2gYAAAGthydHYBSRwAAPsCaG8TAAOw4BywAAGg0AAAHF9jZXQBZBMAAA==")
\ No newline at end of file
diff --git a/api/search.index/3edc2bdea936.js b/api/search.index/3edc2bdea936.js
deleted file mode 100644
index b854c0f11..000000000
--- a/api/search.index/3edc2bdea936.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAACaxgCaRhidBsCoCAAAByOYXkjAAKgwAAAG+1ldDswAAABAAAbAAkAZwwGALQQAAC/EQEAlBcGAOoXAABVGgYA8hoAADEcAACRHAAA")
\ No newline at end of file
diff --git a/api/search.index/3ee9c01077e7.js b/api/search.index/3ee9c01077e7.js
new file mode 100644
index 000000000..f1e5ef97d
--- /dev/null
+++ b/api/search.index/3ee9c01077e7.js
@@ -0,0 +1 @@
+rn_("MUgAAL8aYRtiG6scEwICoFAAABy8Z3I7MAAAAQAAGwAJAIAOCACpFgMAyRcBAOIZAAD9GQAA6hoBAPMaBQBtGwEApBwAAA==")
\ No newline at end of file
diff --git a/api/search.index/3f2727ff2c1b.js b/api/search.index/3f2727ff2c1b.js
deleted file mode 100644
index 73b737f11..000000000
--- a/api/search.index/3f2727ff2c1b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQJGAAAhJBtPG8kcBukcCPUcaXN06hkVAEEAABTBG8IbbaUaphoTBAKgIAAAGwZpcveNGAAAAQA+AQEAKQEyAC8BkwCEsEAX+ALcsJAcGAABFCEAOjAAAAEAAAAAAAgAEAAAAIcXrReuF1waXRq9Gr4ayxrMGg==")
\ No newline at end of file
diff --git a/api/search.index/3f36792a6df1.js b/api/search.index/3f36792a6df1.js
new file mode 100644
index 000000000..9364ee4ae
--- /dev/null
+++ b/api/search.index/3f36792a6df1.js
@@ -0,0 +1 @@
+rn_("BQHIAAAH0hwDxBxlcGUAQAAABckaZW8NrhavFrMYtBjGGscasUEAAMwK1BA/GEAYQRhCGEMYRBggGyEbahzMHL8AhaAwAAAX87BgGsoAAWEABg==")
\ No newline at end of file
diff --git a/api/search.index/3f74b9526eea.js b/api/search.index/3f74b9526eea.js
new file mode 100644
index 000000000..b7f1b5063
--- /dev/null
+++ b/api/search.index/3f74b9526eea.js
@@ -0,0 +1 @@
+rn_("FQBEAAAGUh1kBB1DHUMAA6CAAAActbCQGSEAzWNlbDowAAABAAAAAAAQABAAAADqCOsIpAqlCqYKpwqmC6cL/Qx0DXUNdg18DuQRcRejGi0d")
\ No newline at end of file
diff --git a/api/search.index/3fb5bfe1dfff.js b/api/search.index/3fb5bfe1dfff.js
deleted file mode 100644
index c539fcc1b..000000000
--- a/api/search.index/3fb5bfe1dfff.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQFDAAAHixwFXBxiZuQa5hwFAEYAAAV9HHLOGjFHAACPGiocKxyMHPMDAmZsOzAAAAEAAAcAAgDQEAAAcxIGACUARQAABSgcYYAWJBclF/sDYWZw")
\ No newline at end of file
diff --git a/api/search.index/4062f6b10511.js b/api/search.index/4062f6b10511.js
deleted file mode 100644
index 73405577d..000000000
--- a/api/search.index/4062f6b10511.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQFDAAAFBBsGzBx0dy0b8RsFAUMAAAbWGgbXGmJvXxYbAqDgAAAcKWFjKwKwMBHfB+9hZTFBAAB1GXYZdxl4GQEBADswAAABAACCAAIA3QwAAIgOgQDzAAJldfThDAAAsw8BACgAAQEAOzAAAAEAAMUAAgCnEAAAKRTEACsCoBAAAA4laXWVAEEAAASIF2YEFwUXYRdiF2MXZBdlF2cYbxxwHAUARAAAEHMXdBdzARcbAqAgAAATQmJyBQBAAAAGEx1kCR37AmRyBQHAAAA38BjxGPAaOBsL1RpucjetAIygkAAAGNGxQBzkAAGgYAAAHNOhEAAAHKQ+dCiyx9xxuQc7MAAAAQAAyAAEAN4IAQCPCgAAjQvEAIYOAAA=")
\ No newline at end of file
diff --git a/api/search.index/4076ba8915ee.js b/api/search.index/4076ba8915ee.js
deleted file mode 100644
index 91c090a8f..000000000
--- a/api/search.index/4076ba8915ee.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQIBoHAAABnUZjswAAABAAA+AAMAPQ4AAFQSHgAzGB4AGwKgYAAAGMppdSMAA6AwAAAW96BAAAAcjmFyc/KBGAAAsAI=")
\ No newline at end of file
diff --git a/api/search.index/40d8c61c2a3f.js b/api/search.index/40d8c61c2a3f.js
new file mode 100644
index 000000000..4754c65ab
--- /dev/null
+++ b/api/search.index/40d8c61c2a3f.js
@@ -0,0 +1 @@
+rn_("JQBAAAAzjRNbFwIYzxl3XBYZHRodtQFCAAAHGRkGtBxhdk0YThgDGQQZyhnLGfEa8hovHDAc2hzbHAUBxQAAKLAc7hzvHAQiHWFvBQHAAAAEARsi7RjuGH4cb3kVAEoAAAZSHWQEHUMdBQHAAAACnBwJMR1pbxMIAqAwAAAc1GZp9zUcAABCAAEARgAMAAEANwAhRQAADh0eHR8dJQBAAAADNBxpEBwRHIkcIUIAAP4Z/xmfHDFBAAD+Gv8aABvPHAUBwAAAFQ0cAR0CMxx1efMBhAIBAzowAAABAAAAAAAMABAAAAAGGOgY6RjqGOsY7BipGjcbFxx9HOYc8RwcHfsCZWzzAANwdHUBbxYAABUAQQAABSkbd7QXtRcVAEAAABQKHQsdbe8a6hz7AmRuRQBEAAAAHRxzrRjQGYIbgxtXHAUAQQAAJX8bOhw7HHeQGuccA8mggAAAHDKgIAAAF32gYAAAHMBATAULOzA [...]
\ No newline at end of file
diff --git a/api/search.index/4105596be839.js b/api/search.index/4105596be839.js
deleted file mode 100644
index cf53c67bd..000000000
--- a/api/search.index/4105596be839.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBAAAAE5htjGhvzAwFzAZMaAAATAAKggAAAG6pmcgEsDgAAKwKgQAAAFuVhZwUBwAAAEnoYWhwZYxztHGlvEwADsDAZngL0sDAZnwABZmlwOjAAAAEAAAAAAA4AEAAAAFAW2BfZF8IYyBnJGccazxr0GzYcNxx8HIgciRy/HCsCoDAAABjFZnP7AmNu")
\ No newline at end of file
diff --git a/api/search.index/41173b0a157d.js b/api/search.index/41173b0a157d.js
deleted file mode 100644
index 4230e517e..000000000
--- a/api/search.index/41173b0a157d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBRAAAGEh1kBB0FAcQAAChuHKscrBwE3hxhbxsCoGAAABrcYWUhQgAAsRiyGD0cBQHAAAAyJRgmGMsZdBoDwhprcGsDoDAAAByRZW95FQBKAAAGDh1kwRz/HAUBwAAAAlocCe0caW8TBwKgMAAAHJJmaff0GwAAQgABAEUADAABADYAGwKwMBqgAYdhciFFAADLHNoc2xwlAEAAAAPzG2nPG9AbSBwhQgAAwRnCGV0cMUEAAL8awBrBGo0cBQHAAAAVzBu+HALyG3V58wGEAgEDOjAAAAEAAAAAAAwAEAAAAMwXrBitGK4YrxiwGGoa+BrWGzwcoxyuHNgc+wJlbAUAQgAABhEdZAId8wCEAJAM9p0QAACaBV4DAQBBAWsABQHAAAAQfhh/GAN6HGZzGwKggAAAHNNlbyFDAADQGMgauxyFAUIAAAGpGgTlG2lzQxeYGJkYrxmwGfcaPBs9GyMcFQBBAAAF6hp3ehd [...]
\ No newline at end of file
diff --git a/api/search.index/413a0bc4e037.js b/api/search.index/413a0bc4e037.js
deleted file mode 100644
index 026ce056a..000000000
--- a/api/search.index/413a0bc4e037.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUMAAJUaUBvmGwUBwwAACvAcDQAdZXQjBAKgYAAAHDRicAHhGAAABQFDAAAJLxwV4RriGmRzOhcjAAKgYAAAGdNidPLNEAAA7gj7Am50WwOgUAAAHJthZW8=")
\ No newline at end of file
diff --git a/api/search.index/41526bb61181.js b/api/search.index/41526bb61181.js
deleted file mode 100644
index af1b870f7..000000000
--- a/api/search.index/41526bb61181.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAASehhaHBljHO0caW8TAAOwMBmeAvSwMBmfAAFmaXA6MAAAAQAAAAAADwAQAAAAUBbYF9kXwhjIGckZxxrPGvQbNhw3HHwcfhyIHIkcvxw=")
\ No newline at end of file
diff --git a/api/search.index/41ed4fab1988.js b/api/search.index/41ed4fab1988.js
deleted file mode 100644
index f5162531f..000000000
--- a/api/search.index/41ed4fab1988.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("dQBAAAAHJhtvLxaCGYMZhBmFGYYZhxmIGQUBwQAABC0cFYQaCBxxcwUBywAABOEcBewccXNhRQAAVRpWGlcaWBpZGloaWxoFAFEAAAYTHWQJHWcOAIigwAAAHDGwQBhsAAGgcAAAGoMZoQM7MAAAAQAAJwALANgMAAClEAAAtRABANYQAADBEQMAFRgGAJEYBgDjGQYAaxoGAJkaAACnGgEA")
\ No newline at end of file
diff --git a/api/search.index/42666d6511c6.js b/api/search.index/42666d6511c6.js
deleted file mode 100644
index 09c6a3af2..000000000
--- a/api/search.index/42666d6511c6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAADzRoA4xdhcwUBwwAAF5YclxwS9xv4G2RzUwADoFAAABsrZm1u8n8WAACkADFAAABRClYOVw6OF/sCeXplAEQAAAYMHWSyGbMZmhqbGqgcqRz3HPMFAWPyihYAAAEAGwKgIAAAFiBlbwUBwAAAA6IZAH4WYXMFAcAAAARpGlCdF54XnxegF6EXohdpcwUBwwAAF2QcZRwSKRsqG2RzBQBEAAADIBt3cBUFAcAAAANHE0ADDQQNBQ0GDQcNYWX7AnJ0twcAiKAAAAAQrLCQHM0ADyE4DTswAAABAAATAAYAAQMEAM8QAABPEgQABxcGAEQcAAD1HAAA")
\ No newline at end of file
diff --git a/api/search.index/4281326133d5.js b/api/search.index/4281326133d5.js
deleted file mode 100644
index 64ff32a42..000000000
--- a/api/search.index/4281326133d5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBFAAAGyhtmxRcFAEIAAAYKHWTxHPsCaXQVAUYAAAbJGwhtHGJ3wxfEF/MAAmNzOzAAAAEAABoADQChCgEAgwwCADwNAQB7GAEAjxkAAMobAADVGwAA/BsHAAkcAAANHAEAThwAAHscAAC0HAEA")
\ No newline at end of file
diff --git a/api/search.index/42cff9f1a22b.js b/api/search.index/42cff9f1a22b.js
deleted file mode 100644
index d738970b1..000000000
--- a/api/search.index/42cff9f1a22b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQJGAAAh5RfmF6YZAn0YEn4YfxhpbHKBFq8XsBddGF4YEhwTHLUBQAAANn0aBhxxHNccBZwcYmNME4gWiRbtFu4WZBjsGe0ZiRpAHEEcahwjAgKwIBcQAAFucgGuEAAAFQBMAAAAQhtz9RoVHPsCZWkFAFEAAAYKHWTxHAUAWAAABhMdZAkd84cCcnZBRQAAMBYxFjIWMxY0FiUBRwAAFkEbJRwC6BhicksXVRjSGgUCQQAAFNUc1hwCzBwGJRtwcnYgG0FDAADFEcYRxxHIEckR+wJudAUARAAAB8IccywbI4IDsHAaugABoGAAABpebXR1KwKgsAAAGpFvcgUBwAAABtEaFkoXFRtocvcXAMqwUBNgAAFiOkvXtDQASbQcOzAAAAEAADsAAgDgAzgAVg0CAA==")
\ No newline at end of file
diff --git a/api/search.index/42d2b1d03523.js b/api/search.index/42d2b1d03523.js
new file mode 100644
index 000000000..a422de90f
--- /dev/null
+++ b/api/search.index/42d2b1d03523.js
@@ -0,0 +1 @@
+rn_("BQBEAAAGCxxm/xcrA6AQAAAWVrAgE3IAAWVvcgUAQQAABk4dZDUdSwOwYBhdAAGgIAAAHCZjdHpPAYWwQBrRAXywQBaVAAGgsAAAHJswIQQ=")
\ No newline at end of file
diff --git a/api/search.index/433fe00b78e6.js b/api/search.index/433fe00b78e6.js
new file mode 100644
index 000000000..c19a430e3
--- /dev/null
+++ b/api/search.index/433fe00b78e6.js
@@ -0,0 +1 @@
+rn_("BQBBAAAGVx1kTR0xSAAALBktGS8bdxv7AmFlJQBBAAAh8BvDHN4cZbQa6BzpHJuEoGAAABwssDAQ4QWMQQARBQBJAAAGsxxiyBoTgQKwUBj6AAFmdysCoCAAABoRYm4FAcAAAAf2FwWPGnJ01wAAxqBAAAActaBAAAAQ/rCgGvwAAUBEEAr2uQoAAD4CbQAhCa0AAQE=")
\ No newline at end of file
diff --git a/api/search.index/43475aa770ad.js b/api/search.index/43475aa770ad.js
new file mode 100644
index 000000000..388bf6c95
--- /dev/null
+++ b/api/search.index/43475aa770ad.js
@@ -0,0 +1 @@
+rn_("BQHAAAAGmxgHehtlb/UAQgAAEg8bNB11aA5pDmoOaw6nFnsX9Bn1GYYahxq5GuwaHhtYG8Uc0hwbAqAAAAAcUWlzFQFDAAAGAR0CnxxicjcbFxwFAEEAABQKHQsdbeocJQBEAAAAHRxzghuDG1cccwQEoKAAAB0iZmlzdgH8HAAAE4ICsCAYTQABaW77A2Fvcg==")
\ No newline at end of file
diff --git a/api/search.index/4350b260c5f0.js b/api/search.index/4350b260c5f0.js
new file mode 100644
index 000000000..afd532bd7
--- /dev/null
+++ b/api/search.index/4350b260c5f0.js
@@ -0,0 +1 @@
+rn_("BQBRAAAGVh1kSB0FAcQAACiwHO4c7xwEIh1hbxsCoGAAABsbYWUhQgAA7RjuGH4cBQHAAAAyYRhiGAgasxoDARtrcGsDoDAAABzTZW95FQBKAAAGUh1kBB1DHQUBwAAAApwcCTEdaW8TBwKgMAAAHNRmafc1HAAAQgABAEYADAABADcAGwKwMBrfAYlhciFFAAAOHR4dHx0lAEAAAAM0HGkQHBEciRwhQgAA/hn/GZ8cMUEAAP4a/xoAG88cBQHAAAAVDRwBHQIzHHV58wGEAgEDOjAAAAEAAAAAAAwAEAAAAAYY6BjpGOoY6xjsGKkaNxsXHH0c5hzxHBwd+wJlbAUAQgAABlUdZEYd8wCEAJAM9scQAACoBWMDAQBDAWsABQHAAAAQuhi7GAO8HGZzGwKggAAAHRZlbyFDAAAMGQcb/hyFAUIAAAHoGgQmHGlzfRfUGNUY7BntGTYbext8G2QcFQBBAAAFKRt3tBe [...]
\ No newline at end of file
diff --git a/api/search.index/439c4a08d6c5.js b/api/search.index/439c4a08d6c5.js
new file mode 100644
index 000000000..5385ae897
--- /dev/null
+++ b/api/search.index/439c4a08d6c5.js
@@ -0,0 +1 @@
+rn_("BQLGAAABDB0GLR0IOR1pc3QjhgKgQAAAHJljbgUATwAABk8dZDgdBQBJAAAGNx1k+RwFAEwAAAZKHWQsHQUATAAABkkdZCsd+wJhafODA21udCsDoGAAABy1oNAAAB1CbG1uFQFFAAAGChwIrxxid/0X/hf7A2FvdQ==")
\ No newline at end of file
diff --git a/api/search.index/4411b10736bc.js b/api/search.index/4411b10736bc.js
deleted file mode 100644
index e812f3269..000000000
--- a/api/search.index/4411b10736bc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHpBwizRfOF5cab3kFAcAAABXDGd0bBLAbaXnzAQJsdDowAAABAAAAAAAJABAAAADAEMEQ1hHXEdgR2RFtF4gYvhvUHA==")
\ No newline at end of file
diff --git a/api/search.index/449e76baba9f.js b/api/search.index/449e76baba9f.js
deleted file mode 100644
index dc7b0b555..000000000
--- a/api/search.index/449e76baba9f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAWSxpMGgXEHGZoIwACoHAAABngaXQB3xsAAAUARgAAEDobVhxy6RoxQAAAnBqdGp4anxoFAEoAAAZyHHaYHAUARQAADAEdYTkcI4ECoKAAABxJYXMlAEAAABOMF40Xac8X0Be9GEFCAADEEMUQTBYGG60cBQHDAAAGshwAixdtc7UBQQAAFMEbwhsASxZtczoO4RHiEeMR5BHlEeYRzhjPGHgapRqmGgUBwAAABdEXEokXihd1eecuAMqgwAAAHQGgcAAAGHSwYBfSAwbAQKgbOzAAAAEAACsADgCwCgIAlQwWAKAQAwBiEwEAsRcAAI0YAQDMGQEA9hoAACgbAACrGwAAORwAAEkcAABXHAAArxwAADsDoCAAABscYWVvJQBCAAAFcxhjOQ6ADoEOKwKhEAAAHMRhdQUAQQAADN8bcvoI5woAiaDAAAAdCKCQAAAa0KAAAAAKnqAwAAAcxA2wBzowAAABAAA [...]
\ No newline at end of file
diff --git a/api/search.index/44d78615f7b1.js b/api/search.index/44d78615f7b1.js
new file mode 100644
index 000000000..ca2ea0f75
--- /dev/null
+++ b/api/search.index/44d78615f7b1.js
@@ -0,0 +1 @@
+rn_("JQBCAAAQZxhoGHOnDMYYxxglAUAAAAV+FwV/F3J3wAqqDKsMGwKgAAAADNhueAUBwAAACvEbEkoOzRxjcvsDZWlz")
\ No newline at end of file
diff --git a/api/search.index/44f52534916b.js b/api/search.index/44f52534916b.js
deleted file mode 100644
index 3e19b00c2..000000000
--- a/api/search.index/44f52534916b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("UUEAANka2hruGs4bLRzhHNUARwAABPIcZpcZmBmZGZoZmxmcGZ0ZtBvoG+0b8BuiHA8dEB0bAqBgAAAbG2N0+wJucw==")
\ No newline at end of file
diff --git a/api/search.index/45461e7e5c26.js b/api/search.index/45461e7e5c26.js
new file mode 100644
index 000000000..c9ce2eb0f
--- /dev/null
+++ b/api/search.index/45461e7e5c26.js
@@ -0,0 +1 @@
+rn_("BQBGAAAFvxxyDRsxRwAAzhprHGwczhz1AEYAAAkWHXL6F9cY2BjZGNoY2xjcGN0Y0BoYHBkcGhwbHJAckRyaHAUBwAAAAdkQArgaZXljAAOwYBxFAPhkdHb3JBcAAAEAAQB5AYkB5QItAAUBwAAAUiUYJhgnGCgYKRgqGFQmGScZKBkpGSoZKxlrdgUASwAAGBkdGh13+Bv7A2xwdHMAhKAwAAATfSFIADswAAABAAANAAUARwQAAOkHAwDSEAAA+hAAAKMSBgA=")
\ No newline at end of file
diff --git a/api/search.index/45a01bcecf86.js b/api/search.index/45a01bcecf86.js
deleted file mode 100644
index e68e58529..000000000
--- a/api/search.index/45a01bcecf86.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHBAAAC9hcF3xlhZQUBwQAAAvUXBd4ZYWVrA6AAAAAOQjEyM/UAQAAABTcXdZkKbgxvDHAMcQxyDHMMdAx1DHYMdwwqFysX+RoMG9wbBQLBAAAQLQ5uGBBDDtEaA3QcZm5zMUMAANoY5xrIGy4cBQHBAAAFDBsG5xtmbjUAQAAABIcccMMaxBrsG5ocBQHAAAAHuRwBEBxhbwUBxAAAAu8cAescYW8jhQKgAAAAHIZkZgUBxAAABuAcA9Ecb3QbAqDgAAAc+2hvZzQBiqBQAAAaRqAwAAAcM6GAAAAdELBAHGsAAaBAAAAccC6YBzowAAABAAAAAAAJABAAAABJDkoOSw5LGkwaVBrbGyAcQxzDHAEAArBAG8MAUaAgAAAcXmVyOjAAAAEAAAAAADYAEAAAAOIM4wzkDOUM5gznDOgM6QzqDOsM7AztDO4M7wzwDPEM8gzzDPQM9Qz2DEkXaBdpF2oXvxfRF2EYYhi [...]
\ No newline at end of file
diff --git a/api/search.index/45c1a30dc8cc.js b/api/search.index/45c1a30dc8cc.js
deleted file mode 100644
index 63a62060b..000000000
--- a/api/search.index/45c1a30dc8cc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAGCx1k9BwTjAKgQAAAHNJtbwUBxQAABNkaBTUbcXP7AmFvFQBJAAAEdxxm+hz7HBUASQAABvMcZAUbthwVAEwAAAYGHWR2HOgcFQBMAAAGBR1kdRznHPsCYWkFAcAAAAekHCLNF84XlxpveSMCArBgGcMCGmx0OzAAAAEAAAYAAwDAEAEA1hEDAG0XAAAVAEEAABM7F7wZYawRrRHHDwCIoIAAABwsoGAAAB0OHDEGOjAAAAEAAAAAAAoAEAAAAGIKUwx5FnoWLxdRHMEc4hzjHP4c/xw=")
\ No newline at end of file
diff --git a/api/search.index/45f42d56d83c.js b/api/search.index/45f42d56d83c.js
deleted file mode 100644
index 2f0bad755..000000000
--- a/api/search.index/45f42d56d83c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("4UYAAHsYfBjKG/wb/Rv+G/8bABwBHAIcAxwJHA0cDhx7HAUASAAAALobc44aKwKwQBfbAAFvcjMBA6BgAAAcYGNmb/faDAAAAQB2AHQKowAHAAEA")
\ No newline at end of file
diff --git a/api/search.index/45f56692ff3a.js b/api/search.index/45f56692ff3a.js
new file mode 100644
index 000000000..72d776c5b
--- /dev/null
+++ b/api/search.index/45f56692ff3a.js
@@ -0,0 +1 @@
+rn_("wUEAAFUOdRd2F/kZuhq7Gr8axRphG2IbdhuqHKscFQBCAAAE0xx04hD4EQUCwAAAF1UbVhsX6hrrGgSfGmZsdPsDZWlv")
\ No newline at end of file
diff --git a/api/search.index/4625e45fc841.js b/api/search.index/4625e45fc841.js
new file mode 100644
index 000000000..cee157d83
--- /dev/null
+++ b/api/search.index/4625e45fc841.js
@@ -0,0 +1 @@
+rn_("BQHCAAASNBg1GBI2GDcYc3kFAEUAAAYbHWKsHBUAQQAABF4cZi4dLx0VAEIAAAR/HGYyHTMd+wJhbyFFAADzGUgbSRvTAoSwMBtVAAEAqBDzJRkAAHkB0gEFAEsAAAZWHWRIHbuEoLAAABxFAUEB")
\ No newline at end of file
diff --git a/api/search.index/465a83e13d4c.js b/api/search.index/465a83e13d4c.js
deleted file mode 100644
index 392662e80..000000000
--- a/api/search.index/465a83e13d4c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAUXRZeFhNAE0ETZnQFAEUAAAaeHHYeGwUBwAAABtUaAKsQY3NXAQCFoJAAABp5oCAAAA4kYQAD81sBAACCB/MD")
\ No newline at end of file
diff --git a/api/search.index/4672a7255857.js b/api/search.index/4672a7255857.js
new file mode 100644
index 000000000..a835833c9
--- /dev/null
+++ b/api/search.index/4672a7255857.js
@@ -0,0 +1 @@
+rn_("cUAAAGYWvxnAGcEZwhnDGcQZxRkFAcEAAARuHBXDGkkccXMFAcsAAAQlHQUwHXFzYUUAAJQalRqWGpcamBqZGpoaJwcBh6DAAAAccrBAGKgAAaBwAAAawhGhAzswAAABAAAkAAgA3xABAO0RAwBRGAYAzRgGACAaBgCqGgYA2BoAAOYaAQAbArAQGdwAAWN0")
\ No newline at end of file
diff --git a/api/search.index/469410d9c43b.js b/api/search.index/469410d9c43b.js
new file mode 100644
index 000000000..332ae1b47
--- /dev/null
+++ b/api/search.index/469410d9c43b.js
@@ -0,0 +1 @@
+rn_("BQBAAAAEJxxjWRvzAwFzAdIaAAATAAKggAAAG+tmcgFQDgAAKwKgQAAAFx9hZwUBwAAAErYYnBwZpRwxHWlvEwADsDAZ2wL5sDAZ3AABZmlwOjAAAAEAAAAAAA4AEAAAAIgWEhgTGP4YBRoGGgYbDhs1HHcceBy+HMocyxwCHSsCoDAAABkBZnP7AmNu")
\ No newline at end of file
diff --git a/api/search.index/46c45f7509f4.js b/api/search.index/46c45f7509f4.js
new file mode 100644
index 000000000..a371ba45f
--- /dev/null
+++ b/api/search.index/46c45f7509f4.js
@@ -0,0 +1 @@
+rn_("NQBAAAAGjhpp3gjfCHQKdQoFAEMAAAYPHXdsGyMDAqBQAAAcinN0AasOAABlAEQAAAUXGXJfFmAWYRZiFmMWZBZlFgUARwAAA2AbbFgYcUEAAPQX8xlIG0kb8BuDHMMc3hzjAISwkBnGAAEUEAQ7MAAAAQAAEAAGALUHCQC0GgAAkBsBAHYcAACVHAAA6BwBAJ8CyKCQAAAc3aAQAAAOd6BwAAAdRaAgAAAWnKAgAAAcwgACig8=")
\ No newline at end of file
diff --git a/api/search.index/46c99dfcf193.js b/api/search.index/46c99dfcf193.js
deleted file mode 100644
index 86f92139d..000000000
--- a/api/search.index/46c99dfcf193.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQJGAAAhJBtPG8kcBukcCPUcaXN06hkVAEEAABTBG8IbbaUaphoTBAKgIAAAGwZpcveNGAAAAQA+AQEAKQEyAC8BkwCEsEAX+ALcsJAcGAABFCEA84cXAABEAwEA")
\ No newline at end of file
diff --git a/api/search.index/46ffa069d974.js b/api/search.index/46ffa069d974.js
deleted file mode 100644
index 3b70f9aa8..000000000
--- a/api/search.index/46ffa069d974.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBHAAAG8xxkBRu2HCsCsBAM1goibG21AUEAAAfdGAZyHGF2ERgSGMcYyBiNGY4ZshqzGu4b7xuYHJkchQFEAAAHCBxgghmDGYQZhRmGGYcZiBlycxUYFhgXGBgYGRgaGBsYpxqoGhMBArCAHNUAAXN380wXAAAmA0UBGwKwAAqjC4RtbvsDYWV1")
\ No newline at end of file
diff --git a/api/search.index/471e02ebc256.js b/api/search.index/471e02ebc256.js
deleted file mode 100644
index 7e82350cd..000000000
--- a/api/search.index/471e02ebc256.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQEAOzAAAAEAAMMAAQBlE8MAMUIAAPAY8RjwGjgb+wJvdfMAAW07MAAAAQAAzAAEAFgBAACrCAAAvArJAFMOAAA=")
\ No newline at end of file
diff --git a/api/search.index/4737f22ecaf7.js b/api/search.index/4737f22ecaf7.js
new file mode 100644
index 000000000..e415df89f
--- /dev/null
+++ b/api/search.index/4737f22ecaf7.js
@@ -0,0 +1 @@
+rn_("BQBDAAADTBxpwRojBAKgcAAAHQlwdPQAGAAA5AABAAEAIUIAALAXJBkNGgUAUgAABlUdZEYdFQBAAAAAXxxzoRavF2UARQAABbwccv0Z8xr0GvUa9hr3Gvga84ECY2cVAEIAAAFhHGnuGlcbGwKwEBhcAvdlbBsCoIAAABzyaXIlAE0AAAZQHWTrHOwcOx0FAcMAAAOjHBCRGpIabnPzgQJsbQUBxAAAMYAbFRxmHI4cBbYcZXL3CwKIoHAAABypJogHOzAAAAEAACoAFACKDg4AbBcBAHIXAQCFFwAAoBcAAKgXAwAZGAEAKxgAAE8YAQCRGAAABRkAABgZAAD8GQAA+RoCABEbAACSGwAAJRwAAIAcAACWHAAAnRwAABsCoCAAABOCYWQ=")
\ No newline at end of file
diff --git a/api/search.index/4746dc247e21.js b/api/search.index/4746dc247e21.js
deleted file mode 100644
index d8006a6d6..000000000
--- a/api/search.index/4746dc247e21.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("tQJAAAASghatGRNMF3IaUK0XrhdcGl0avRq+Gmtuc3wXfRd+F38X1hnXGZUaCxtQG6ob5htZHAEDADswAAABAACCAAIAuxcAAPIYgQDLhLBAF2sAAWImxu0SEQoBBA==")
\ No newline at end of file
diff --git a/api/search.index/4761431e594b.js b/api/search.index/4761431e594b.js
new file mode 100644
index 000000000..d08fefebb
--- /dev/null
+++ b/api/search.index/4761431e594b.js
@@ -0,0 +1 @@
+rn_("AYMCoNAAAB0QoQAAAB0gY3AFAEgAAAcFHXNrG/MBAmZ383gNAAABAAEAJQBCAAAOGB1jSxhMGIUaW4SgoAAAGQ6gIAAAG/EVQAA=")
\ No newline at end of file
diff --git a/api/search.index/47d7ee32f3ad.js b/api/search.index/47d7ee32f3ad.js
new file mode 100644
index 000000000..23a4d0c24
--- /dev/null
+++ b/api/search.index/47d7ee32f3ad.js
@@ -0,0 +1 @@
+rn_("tQBCAAADSRd0wQrCCsMKxArFCsYKxwrIChcZthy8HL8cBQBFAAAGSxxiphghRAAAjBaNFl4bBQHBAAACpxgCpRhidPMAAXT13hAAAA0BAQA4Bq8EBQHAAABSPxhAGEEYQhhDGEQYN4obixuMG40bZXUFAEMAABgZHRodd/gbRQFCAAAk8hvzG8EcBScbY3d5F3oXWRhaGGAbKwKgQAAAGchlaQUCwQAAFIoaixoReBcBHBSIGr0aZWx4BQFDAAAPQh0S+hn7GWNy/BcFAEQAAAKqGHKjFvMAAWYB5hEAAPsCZG4BggOhUAAAHUygIAAAHFKggAAAHP1kdXcrAqAgAAAcxG9yQwQDoGAAABsusHAcxQANYmVwAaYWAAAhQgAA4BjhGAAc+wJjdBsCoJAAABt4YW8FAcAAADUFGgYaBhsOGwG1Gml1BQHAAAADDBsAHRhhcwUBwwAAF9gc2RwSOBw5HGRzUwEDoFAAABt [...]
\ No newline at end of file
diff --git a/api/search.index/48ecc047f2cc.js b/api/search.index/48ecc047f2cc.js
deleted file mode 100644
index 237492e9f..000000000
--- a/api/search.index/48ecc047f2cc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBHAAAY1RzWHHe3GxUARAAABF4cZfMa9BoFAcYAAAfZHAXAHGZ0+wJhZlMBA4ATWAAT22RydDswAAABAABpAQYAxxACAOcRXwBiFgEAjBZYAPAZVQBUG1UA")
\ No newline at end of file
diff --git a/api/search.index/491198b3a83c.js b/api/search.index/491198b3a83c.js
new file mode 100644
index 000000000..ae6808bee
--- /dev/null
+++ b/api/search.index/491198b3a83c.js
@@ -0,0 +1 @@
+rn_("BQHHAAAEhhwC2xxpbgUBwAAAB6EcEo4TBhlveQUAQAAACroaaW0cBQHAAAAVAxkEGQUCGWFyAQAAOjAAAAEAAAAAABMAEAAAALcYuBgLHBYcPRw+HD8cQBxBHEIcQxxEHEocThxPHI8cvRz3HPgcFx0jAQKgEAAAGxt2efQOHAAAeQABAC0AxQNBAAAFaRwFaRcW8xz0HBXfGmgcYWNlc9QK0RFzFrgWXhdfFxQYzhppHGscbBzOHEwdSwSwABZyAjCgUAAAGB6gcAAAG/FkbW92dQBEAAASAhsDG2k/G0AbQRtCG4obixuMG40bAQACoNAAABzwoTAAAB0iYXABkRMAABsDoDAAABfIoBAAABwsZG1zBQBGAAAQeRuXHHIoG/MDAXABpBYAABsCoEAAABjvYW8FAEMAAAZXHWRNHfMBAW8BhRYAAAUAQgAAB+IccLAW+wJibPdfAMugQAAAF81ATTAbOjAAAAEAAAA [...]
\ No newline at end of file
diff --git a/api/search.index/4958f660193b.js b/api/search.index/4958f660193b.js
deleted file mode 100644
index 5acd4b513..000000000
--- a/api/search.index/4958f660193b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAGCx1k9BwTjAKgQAAAHNJtbwUBxQAABNkaBTUbcXP7AmFvFQBJAAAEdxxm+hz7HBUASQAABvMcZAUbthwVAEwAAAYGHWR2HOgcFQBMAAAGBR1kdRznHPsCYWnnAQGFoIAAABwsBDAG9FMMAAAmCgEAtQBFAEYAAAMUG2YUGLoauxpTG1UcFQBEAAAGDh1kwRz/HCMCAqCAAAAcc2Ns99wMAAB2AAEAAQDjCS0DhQJ7hKAQAAAMVBFBAA==")
\ No newline at end of file
diff --git a/api/search.index/49bafd034aff.js b/api/search.index/49bafd034aff.js
deleted file mode 100644
index b1b00a12e..000000000
--- a/api/search.index/49bafd034aff.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQBEAAAG7hpygBeBF4IXgxeEF4UXhhcBAAF7bH6HU0Jw9GQKAADtDDoAbAAFAcAAAAe4HAEPHGFvBQBCAAAzahZ3F3gXshxw5xsFAcQAAALuHAHqHGFvI4QCoAAAAByEZGbzAAFl8pwKAADAEQUBwAAADfocBEoabW4FAcQAAAbfHAPQHG90awOg0AAAHNRhaG9nbACMoIAAABpUoDAAABwysIAafAHsoYAAAB0PoEAAABxvsIAc1QABbpgXOzAAAAEAAOQAFAA4BAAAsAcLAHgOAQB6EsMAchUAAEwXAAAPGAEA0BgAANoYAACuGQAARhoAAHIaAADIGgAA5xoAABYbAQC3GwAAyBsAAC4cAABhHAAAuxwAABMAAiAcZK4Ww2VwOjAAAAEAAAAAAAoAEAAAALMKqhAEGAUYBhgHGAgY4RriGikcihw=")
\ No newline at end of file
diff --git a/api/search.index/49e95ce063d2.js b/api/search.index/49e95ce063d2.js
new file mode 100644
index 000000000..1334dfa1c
--- /dev/null
+++ b/api/search.index/49e95ce063d2.js
@@ -0,0 +1 @@
+rn_("MUMAAI0TWxcCGM8ZFQBFAAAItRxjoxotHQUAQwAACtscd+wXBQHAAAAlEhgTGP4YAaUYaXVLA7AgGKcADrBgGAIBzWJydFuEoEAAABxjoCAAABzQAUBBBQBBAAAUHBsdG225GfMCAWnysRgAAAEAFQBBAAAUkxyUHG1cHF0c8wcBafVHGwAANgABAA8BbQBFAEEAAAS5HGZjG44bDB0+HT8dEwaEsCAYswABoGAAAB0toIAAAB05AAEHAScaAAAFAcMAABVZHFocBroabnQFAcAAABMyGBMbGy4cMRxjcSUAQQAAFAIcAxxttxrkGuUaEwSEoKAAABz1oCAAABtFoKAAABzaACEROjAAAAEAAAAAAAcAEAAAAOsXyRjKGAkaCho1G2cbmRy3PwCKsOAc1gABNOEcOzAAAAEAADMAFgCFDAcAmAwAAN4QAAD0EAAA6xEBAHgSAgBcFgAAwRcAAM4XBgDnFwEAJBgAAGc [...]
\ No newline at end of file
diff --git a/api/search.index/49f46d5bc3f6.js b/api/search.index/49f46d5bc3f6.js
deleted file mode 100644
index b4048046c..000000000
--- a/api/search.index/49f46d5bc3f6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBAAAA0URziHOMc/hxszhwFAEIAAAIDHW34HCOFAqCAAAAdB2FrBQBFAAA0URziHOMc/hxszhz7AnJzMUMAAI8aKhwrHIwcdQFCAAABqRoE5Rtpc5gYmRivGbAZ9xo8Gz0bIxwhhwKggAAAHQcFYWtjAgOgoAAAHP1hY2sBShwAABUAQgAABz8cbTUXDBgjgQKgMAAAGX1ia/ODAmVpZQBCAAAGDB1kshmzGZoamxqoHKkc9xwbAqAwAAAXL2RtRQBAAAAHuBtzkAqRClIMuRFnFtUARQAABPIcZpcZmBmZGZoZmxmcGZ0ZtBvoG+0b8BuiHA8dEB0jAAKwgBv1AAFkbvXCEAAAGQEBAIQGKgKvH4mgIAAADj6gkAAAGNKxQE0=")
\ No newline at end of file
diff --git a/api/search.index/4aec8ff8b084.js b/api/search.index/4aec8ff8b084.js
deleted file mode 100644
index ecb3ef6bb..000000000
--- a/api/search.index/4aec8ff8b084.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLDAAAIvBwC0xsIoRxidXcjBgKgYAAAGo1icAFaEwAAIwAEsIAXSAF8oIAAABvroRAAABwVYmNsdvNyAQAArgKOFw==")
\ No newline at end of file
diff --git a/api/search.index/4b44ed188494.js b/api/search.index/4b44ed188494.js
new file mode 100644
index 000000000..2b822f568
--- /dev/null
+++ b/api/search.index/4b44ed188494.js
@@ -0,0 +1 @@
+rn_("MUEAAGwOsxdiHLocIUIAAJgXmReaFxUARQAABd8cY4EcghwFAEkAAAYbHWKsHFOFA6AAAAAZFGZzd/OCAmRpY4EDoIAAABzQaGl0")
\ No newline at end of file
diff --git a/api/search.index/4b45e7738ddf.js b/api/search.index/4b45e7738ddf.js
new file mode 100644
index 000000000..c2f2b4113
--- /dev/null
+++ b/api/search.index/4b45e7738ddf.js
@@ -0,0 +1 @@
+rn_("BQHAAAA1FhyPHPcc+BwMAB1haRMAAqAwAAAbc2ZsOjAAAAEAAAAAAAgAEAAAABwYsBgPGXkbBxxxHJcc4hwJHfMAAXIBKBsAAA==")
\ No newline at end of file
diff --git a/api/search.index/4b83412ec320.js b/api/search.index/4b83412ec320.js
new file mode 100644
index 000000000..99aed4e64
--- /dev/null
+++ b/api/search.index/4b83412ec320.js
@@ -0,0 +1 @@
+rn_("tQJAAAASuhbqGROGF7EaUOcX6BebGpwa/Br9Gmtuc7YXtxe4F7kXExoUGtQaShuPG+sbJxybHAEDADswAAABAACDAAIA9RcAAC4ZggDLhLBAF6UAAVIE+nnMygoBBA==")
\ No newline at end of file
diff --git a/api/search.index/4b9bad53a537.js b/api/search.index/4b9bad53a537.js
deleted file mode 100644
index c53842926..000000000
--- a/api/search.index/4b9bad53a537.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("dQFCAAABqRoE5Rtpc5gYmRivGbAZ9xo8Gz0bIxwFAEIAAAIDHW34HCOHAqCAAAAdB2FrYwIDoKAAABz9YWNrAUocAAAVAEIAAAc/HG01FwwYI4ECoDAAABl9Ymv7AmVp")
\ No newline at end of file
diff --git a/api/search.index/4ba1878d4000.js b/api/search.index/4ba1878d4000.js
deleted file mode 100644
index 205a6703c..000000000
--- a/api/search.index/4ba1878d4000.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBAAAADxBtquhslAEMAAAGBHGV1GqUcphwVAEQAAAReHGXzGvQaBQHGAAAH2RwFwBxmdPsCYWYTAQKAE1gAE9tkcjswAAABAABpAQYAxxACAOcRXwBiFgEAjBZYAPAZVQBUG1UAKwKgEAAAGxtkegUARgAABhMdZAkd8wEBYQEyDQAAGwKgAAAAELtjcWFCAAAHFwgXCRcKFwsXDBcNF9cJAIiwYBmAAnugIAAAE1WgQAAAGGccSQP1cRUAAEcC0QEBAAQBGwKwABZYAkJscw==")
\ No newline at end of file
diff --git a/api/search.index/4bb45260d0f2.js b/api/search.index/4bb45260d0f2.js
new file mode 100644
index 000000000..b54ad634b
--- /dev/null
+++ b/api/search.index/4bb45260d0f2.js
@@ -0,0 +1 @@
+rn_("BQHBAAACmBYMaBxmbgUBxAAAAZYYBRMbaXP7AmxvBQHFAAAC6hkDsRprbhsCoLAAABtwY3UzAISgcAAAGJegcAAAGJgFAAb1wggAAAEAAQABAC8AKwKhcAAAHVRhcw==")
\ No newline at end of file
diff --git a/api/search.index/4c13daa71b4e.js b/api/search.index/4c13daa71b4e.js
new file mode 100644
index 000000000..bfad780b9
--- /dev/null
+++ b/api/search.index/4c13daa71b4e.js
@@ -0,0 +1 @@
+rn_("dQFCAAAB6BoEJhxpc9QY1RjsGe0ZNht7G3wbZBwFAEIAAAJHHW08HSOHAqCAAAAdS2FrYwIDoKAAAB1BYWNrAYscAAAVAEIAAAeAHG1vF0gYI4ECoDAAABm6Ymv7AmVp")
\ No newline at end of file
diff --git a/api/search.index/4c4625835f32.js b/api/search.index/4c4625835f32.js
new file mode 100644
index 000000000..54f5f25b7
--- /dev/null
+++ b/api/search.index/4c4625835f32.js
@@ -0,0 +1 @@
+rn_("BQHDAAAKNB0NRB1ldCMGAqBgAAAcdWJwAR0ZAADzBQFjAbscAAAFAsEAAAKIEwKJEwOoFmttdAUBwAAADBMcCQgaY3P7AmVzBQHFAAAJdhwKnRxjZUsDoCAAABgwoFAAABocYWVpBQHAAAAEXA4O3hxvcgUCyAAAAjAbCeMcCv4cYWVzSwOgkAAAGgegwAAAGy9jbHPnGADJgAMNDPBQoHAAABanoOAAABwSoFAAABDtQgegAzowAAABAAAAAAAHABAAAAAWABcAGAAZAB0AUAFRAVYB")
\ No newline at end of file
diff --git a/api/search.index/4c95d525415e.js b/api/search.index/4c95d525415e.js
new file mode 100644
index 000000000..76d6f5bb1
--- /dev/null
+++ b/api/search.index/4c95d525415e.js
@@ -0,0 +1 @@
+rn_("BQHEAAARFRyOHAW2HGVyEwUCoCAAABoNYnL2chcAAAEApgABADUAtgABAQOgQAAAGEewYBwvAAGAF8E0kAFmcHM7MAAAAQAAEAAGAKwXAADJGQAADhoBAPAaAAA5GwUAhBsFAPMAAm509NsaAAABAAEAAQA=")
\ No newline at end of file
diff --git a/api/search.index/4cac4c803e6a.js b/api/search.index/4cac4c803e6a.js
deleted file mode 100644
index 0bac2efd6..000000000
--- a/api/search.index/4cac4c803e6a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAU3RreGm18GfMCAWnydRgAAAEAFQBBAAAUUhxTHG0bHBwc8wcBafUIGwAANgABAA0BawAFAcQAAAF4GgqyHGlu+wNjb3A1AEMAAAGNHGk8HKMcrhzYHBOIAqAwAAAcPXN0BQHAAAAKLhwH2xphaQUBwAAABbQZBncaY2wVAEUAAAb5HGTKHPYcE4MDoMAAABxooDAAAByqZm5zZyoAirBgGXoAAaBgAAAZtaEAAAAcabCAGqcAAaDgAAAcguS4AzswAAABAAAzAAwAzQwAAA8NIQBZGAAAgBkAADAbAAD7GwAABBwAAPMcAAD5HAAABR0BAAodBAARHQIA")
\ No newline at end of file
diff --git a/api/search.index/4cc177f4309f.js b/api/search.index/4cc177f4309f.js
new file mode 100644
index 000000000..2853f68dc
--- /dev/null
+++ b/api/search.index/4cc177f4309f.js
@@ -0,0 +1 @@
+rn_("IUgAAAUaBhoGGwUBxgAAEsYaxxogGxkcGaEacnMhRQAACRgKGPkY+wNjbnRRSAAAARoCGgMaBBoEGwUbBQHIAAAjEBwRHIkcKMocyxwCHXB0+wJhciFMAAB7G3wbZByvAoagAAAADW6gMAAAF0igIAAAFoI4gAMhQgAAnw6gDqEO+wJhZQ==")
\ No newline at end of file
diff --git a/api/search.index/4cd717d53cc6.js b/api/search.index/4cd717d53cc6.js
deleted file mode 100644
index 1bc8f84f9..000000000
--- a/api/search.index/4cd717d53cc6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAG2xsBZRpmaaUARQAABBQcZbQYtRjPGX0a1hrHG8sbBhwKHHEc1xwVAEMAADBzF3QXqherF3MBFyYX+wNvdXk=")
\ No newline at end of file
diff --git a/api/search.index/4d09bcf1cfd9.js b/api/search.index/4d09bcf1cfd9.js
deleted file mode 100644
index b079b2c29..000000000
--- a/api/search.index/4d09bcf1cfd9.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("cUAAAC8WghmDGYQZhRmGGYcZiBkFAcEAAAQtHBWEGggccXMFAcsAAAThHAXsHHFzYUUAAFUaVhpXGlgaWRpaGlsaJwcAh6DAAAAcMbBAGGwAAaBwAAAagxGhAzswAAABAAAkAAgAtRABAMERAwAVGAYAkRgGAOMZBgBrGgYAmRoAAKcaAQAbA6FAAAAcxKAgAAAYVmVoaQ==")
\ No newline at end of file
diff --git a/api/search.index/4d4421f7ccae.js b/api/search.index/4d4421f7ccae.js
deleted file mode 100644
index 62e110955..000000000
--- a/api/search.index/4d4421f7ccae.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QUIAANcY5hjnGL0bHxxRQQAAfBqAGiIbIxtoHGkcBQLAAAAXFhsXGxerGqwaBGAaZmx0+wJlbysCoGAAABjdY3QzAAOgYAAAHHJhcnY6MAAAAQAAAAAADAAQAAAAYAoRGBIYxxjIGI0ZjhmyGrMa7hvvG5gcmRw=")
\ No newline at end of file
diff --git a/api/search.index/4d699e2f05e1.js b/api/search.index/4d699e2f05e1.js
new file mode 100644
index 000000000..3aeea9876
--- /dev/null
+++ b/api/search.index/4d699e2f05e1.js
@@ -0,0 +1 @@
+rn_("BQBGAAAGFx1mmBzzAwFzAQoSAAA1AEAAABOMF40XaV8YYBiRGpIaBQBDAAAAixdzoxxjAgOwEBjeAAFpbnPy7xgAADMEBQHAAAAH+xwBUBxhbwUBxAAAAjIdAS4dYW8jhQKgAAAAHMZkZgUBxAAABiMdAxMdb3QbAqDgAAAdPmhvNwGDh6AwAAAcc6GAAAAdU6BAAAAcsaBQAAAcxyyIAwUASQAABrMcYsgaE4ICsFAY+gABZndLA6CAAAAX9qBAAAActWFlaQUAQQAAAucQZb8KGwKwQByhAEZjdAUBwAAAEOUM5gwRpA4wG25yGwOgkAAAHOOwoBsHAfdhZXPXBwDHsGAYLAABAEwKDPNaBAAAAQABAA==")
\ No newline at end of file
diff --git a/api/search.index/4d7bec211bf4.js b/api/search.index/4d7bec211bf4.js
deleted file mode 100644
index 1736d442a..000000000
--- a/api/search.index/4d7bec211bf4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHpBwizRfOF5cab3kjAgKwYBnDAhpsdDswAAABAAAGAAMAwBABANYRAwBtFwAAIwECoGAAAB0OZGn3YgoAAO8RcAAhAAEAGwABAAUBwAAAA80aAOMXYXMFAcMAABeWHJccEvcb+Btkc1MBA6BQAAAbK2ZtbvJ/FgAApAAFAcAAAAOiGQB+FmFzBQHAAAAEaRpQnReeF58XoBehF6IXaXMFAcMAABdkHGUcEikbKhtkc/MEhCAwBDowAAABAAAAAAAHABAAAADPEE8SUBJRElISUxJEHPUcBQBAAAAGCx1k9BwrAqBAAAAXImlzBQHDAAAXuxu8GxItGC4YaHO3AACFoEAAABzSsDAOPAmoIFCCOjAAAAEAAAAAAAcAEAAAAD8E2wcqDscXZBxlHJYclxxlBEEAABbuGe8ZCxocDDocBP4XDDscZm1ydXfJDMoMywzMDAwNDQ0ODXuEoBAAABCsEYEA")
\ No newline at end of file
diff --git a/api/search.index/4d895f146a35.js b/api/search.index/4d895f146a35.js
new file mode 100644
index 000000000..e1372eede
--- /dev/null
+++ b/api/search.index/4d895f146a35.js
@@ -0,0 +1 @@
+rn_("BQHAAAAH5xwiBxgIGNYab3kFAcAAABUAGh4cBPEbaXljAAOgcAAAGAFkbHQ6MAAAAQAAAAAACgAQAAAAeQ7qEOsQAxIEEgUSBhKnF8QY/xsYHQEEADswAAABAACjAAIAexMBALEVoQD7AmFl")
\ No newline at end of file
diff --git a/api/search.index/4dedcfd21572.js b/api/search.index/4dedcfd21572.js
deleted file mode 100644
index 82868e30f..000000000
--- a/api/search.index/4dedcfd21572.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBGAAAG8xxkBRu2HDUAQAAAE1IXUxdpIxgkGFIaUxoFAEMAAABRF3NhHGMAA7AQGKIAAWluc/KzGAAAKwQVAEQAAAYOHWTBHP8cIwMCoIAAABxzY2z33AwAAHYAAQABAOMJLQOFAgUCwgAAAvEaCaAcCrscYWVzKwKgEAAAF7xpbysCoGAAABl0ZXLVAEIAAATyHGaXGZgZmRmaGZsZnBmdGbQb6BvtG/AbohwPHRAdZwcAiLBwGaMAAaBwAAAZvKEQAAAczBMxBfa4CAAA0gDrDwEAAQABAA==")
\ No newline at end of file
diff --git a/api/search.index/4e4930879c6d.js b/api/search.index/4e4930879c6d.js
deleted file mode 100644
index 8dd91ea9e..000000000
--- a/api/search.index/4e4930879c6d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQBBAAAUUhxTHG0nGCgYKRgbHBwcBQBFAAAEFBxlzxkbAqAgAAAaZXV5MwSEsCAXRgABoEAAABpmAgEDOjAAAAEAAAAAAAsAEAAAAMwQThZPFjAXMReAGAgbJhs+Gz8bTBy3HAUBwAAAE8sQqxkEXBxpchUBQQAABMwYBKEZb3T5FuAaxwEAhqBwAAAci6CAAAAX2rDwHJQAATpAAjowAAABAAAAAAAHABAAAADRB7QZtRl3Gtsa5BqCHOYc")
\ No newline at end of file
diff --git a/api/search.index/4e7b7ae00ce5.js b/api/search.index/4e7b7ae00ce5.js
new file mode 100644
index 000000000..eb73a321d
--- /dev/null
+++ b/api/search.index/4e7b7ae00ce5.js
@@ -0,0 +1 @@
+rn_("BQBBAAAGTx1kOB0TjAKgQAAAHRVtbwUBxQAABBgbBXQbcXP7AmFvFQBJAAAEuRxmPh0/HRUASQAABjcdZEQb+RwVAEwAAAZKHWS4HCwdFQBMAAAGSR1ktxwrHfsCYWnnAQGFoIAAABxtBDAG9HAMAABBCgEAtwBFAEYAAANTG2ZQGPka+hqSG5YcFQBEAAAGUh1kBB1DHSMCAqCAAAActWNs9/0MAAB3AAEAAQD7CTIDigJ7hKAQAAAMcRFBAA==")
\ No newline at end of file
diff --git a/api/search.index/4ecdbce8604b.js b/api/search.index/4ecdbce8604b.js
new file mode 100644
index 000000000..0f08e4cd3
--- /dev/null
+++ b/api/search.index/4ecdbce8604b.js
@@ -0,0 +1 @@
+rn_("BQBFAAABjBxp+hsbArCQHFMAAWVpIUUAAAkaChpnG/OFAnN2BQHAAAAFbRwHeBtmdAUAQwAAEd4Y3xhp7xg7A6AgAAAcm2xudQUBwAAAEuQZ5RkUahzMHGl0BQHAAAAvDh0eHR8dJw4chxyIHGFyIUMAAKEY9hv3GwUAQQAABgcddCAcpwMAhqCgAAAdEaBAAAAXPDSQAjowAAABAAAAAAAOABAAAAD8EP0QpRYcGx0bKxssGwIcAxyTHJQcrRyuHAodCx0BggOhUAAAHUygIAAAHFKggAAAHP1kdXcrAqAgAAAcxG9yQwQDoGAAABsusHAcxQANYmVw86YWAAARAwEABQBGAAAQeRuXHHIoG/MCAXD3pBYAADwCAQARAwEADQDBAPsCY3R3AQCFoHAAABgegUAMAXcBAAA=")
\ No newline at end of file
diff --git a/api/search.index/4ed6b30df942.js b/api/search.index/4ed6b30df942.js
deleted file mode 100644
index 5570097df..000000000
--- a/api/search.index/4ed6b30df942.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHBAAAC9hcF3xlhZQUBwQAAAvUXBd4ZYWVrA6AAAAAOQjEyMwEBAbBAG8MAUWU6MAAAAQAAAAAANgAQAAAA4gzjDOQM5QzmDOcM6AzpDOoM6wzsDO0M7gzvDPAM8QzyDPMM9Az1DPYMSRdoF2kXahe/F9EXYRhiGLQYtRjWGM8Z0xl9Gn8ajRrWGuMa7xoyG0EbxxvJG8sbzBvUGwYcChwlHDQcTRxxHL4c1xyTAASgUAAAHHSgYAAAF/RlcnV2OzAAAAEAABUAAQDiCBUA")
\ No newline at end of file
diff --git a/api/search.index/4f12e3bb1a67.js b/api/search.index/4f12e3bb1a67.js
deleted file mode 100644
index 78f8bac45..000000000
--- a/api/search.index/4f12e3bb1a67.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBFAAAGxxtiwRcFAEcAABa0HLUcZsYbE4MCoDAAABm7cHMbAqBwAAAbH2FlCQKhAAAAHJ+gsAAAHGBhb0sDoEAAABuroKAAABvrY3F0BQBJAAAGnhx2HhsFAcAAAAZ5HAGuGzNxBQHAAAAC5RoEQhxpb0cChIagMAAAG+mgIAAAG62gcAAAHDCgMAAAG+rAiAMjgQKgYAAAGxxjdBcPAIigkAAAGx2g8AAAHJGhQAAAHMYMkRYBPg0AACMAAqBAAAAc8mZnOjAAAAEAAAAAAA0AEAAAAJcZmBmZGZoZmxmcGZ0ZtBvoG+0b8BuiHA8dEB0=")
\ No newline at end of file
diff --git a/api/search.index/4f5192d50e3b.js b/api/search.index/4f5192d50e3b.js
new file mode 100644
index 000000000..5f2793267
--- /dev/null
+++ b/api/search.index/4f5192d50e3b.js
@@ -0,0 +1 @@
+rn_("NQFAAABhIRgiGCMYBxqyGsQaQR0V0RpNHGlzCBsJGxMcRhwrAqCwAAAdB3R5RwAAhaBgAAAWtaCQAAAccKBgAAAdQbBQGyAAARwQAvLoBwAAjA8=")
\ No newline at end of file
diff --git a/api/search.index/4f63c68b5c11.js b/api/search.index/4f63c68b5c11.js
new file mode 100644
index 000000000..9ef2f8684
--- /dev/null
+++ b/api/search.index/4f63c68b5c11.js
@@ -0,0 +1 @@
+rn_("8UYAALcYuBgLHD0cPhw/HEAcQRxCHEMcRBxKHE4cTxy9HBcdBQBIAAAA+xtzzRorArBAGBUAAW9yMwIDoGAAAByiY2ZvOjAAAAEAAAAAAAcAEAAAAPsM/AxzDf8XpBirGKwYmBw=")
\ No newline at end of file
diff --git a/api/search.index/4f708cea13a0.js b/api/search.index/4f708cea13a0.js
new file mode 100644
index 000000000..25eaf2e51
--- /dev/null
+++ b/api/search.index/4f708cea13a0.js
@@ -0,0 +1 @@
+rn_("FQBFAAAItRxjoxotHQUBwAAAA7UYBGMcYW/zAAJ0dff0EAAAhAEBAAEAoQYBAIUBVQBAAAAFyRplrhavFrMYtBjGGscaGwKwYBrKAAFmdBsCoGAAABoLZW8BAQOgQAAAHLmwQBsrAAGgAAAAF8tmbXM7MAAAAQAAFQAHAEwXDgDVGgAAYxsAAI4bAAB5HAAADB0AAD4dAQAHDQGJoEAAABv0oDAAABj/oEAAAByboFAAABqioCAAABatoIAAAB05JwkHOjAAAAEAAAAAAAsAEAAAAF8Opw6oDqkOkxaUFogXJxr5G6UcBR0xHSFDAADWHNccAB1RQwAAgRMsFy0XLhcvFzAXNwEAhqAQAAAKt7AgDPMD3aAgAAATfxlQAjswAAABAAAOAAIAOAQAABMGDQA=")
\ No newline at end of file
diff --git a/api/search.index/4f85ace45ab5.js b/api/search.index/4f85ace45ab5.js
new file mode 100644
index 000000000..93621ea3d
--- /dev/null
+++ b/api/search.index/4f85ace45ab5.js
@@ -0,0 +1 @@
+rn_("BQBRAAAGVh1kSB0hRAAAExn+G2AcUwQDoMAAAB0hZWZ3AVwbAAAlAEUAAAZHHGKgGCkaKhoFAcAAAAfVHAXCHGZ0BQHAAAAUnxgoGgYdHW9yBQBGAAAEBBxlEhlXBQGHsPAdJgABsDAYywABoFAAAB0DJoAWOjAAAAEAAAAAAAcAEAAAAEwOBREGEQcRXBhTGzYcNxwVAEIAAAFhHGnuGlcb+wJlbFsDoIAAABzyaXJ1")
\ No newline at end of file
diff --git a/api/search.index/4fad28174ef1.js b/api/search.index/4fad28174ef1.js
deleted file mode 100644
index b16c4401b..000000000
--- a/api/search.index/4fad28174ef1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AYECsUAc5AABsPAcsAABZ3MVAUsAAAeLHAVcHGJm5BrmHAUBwAAAAMwcBs0YZXQFAcMAAAybHA/OHGNm+4QRQQA=")
\ No newline at end of file
diff --git a/api/search.index/4fb85a7db754.js b/api/search.index/4fb85a7db754.js
new file mode 100644
index 000000000..8c456fbbc
--- /dev/null
+++ b/api/search.index/4fb85a7db754.js
@@ -0,0 +1 @@
+rn_("BQHAAAABdg4KVBtlaQUBRAAAB+0bBwUdY3NrGwEBAbAAEdoAAXM7MAAAAQAAEwAJAPIMAABxDgQALBgBADQYAQBpGAEAjhgBACsaAQBoGwEAOBwBAEsDoEAAABzyoIAAABrPY2x0ZQBEAAAGUB1k7xnwGdka2hrrHOwcOx3zBQFj8sIWAAABABsCoCAAABZXZW8FAEQAAANfG3enFQUBwAAAA3kTQCQNJQ0mDScNKA1hZfsCcnQ7A7CQHRAAEGFydQUAQQAABk8dZDgdE4wCoEAAAB0VbW8FAcUAAAQYGwV0G3Fz+wJhbxUASQAABLkcZj4dPx0VAEkAAAY3HWREG/kcFQBMAAAGSh1kuBwsHRUATAAABkkdZLccKx37AmFp5wEBhaCAAAAcbQQwBvRwDAAAQQoBALcAJQBGAAADUxtmUBj5GvoaOwOgEAAADHFlaW8VAEIAAAN1F2HYEdkRS4SgsAAAG+ygYAAAGR+ [...]
\ No newline at end of file
diff --git a/api/search.index/504137253593.js b/api/search.index/504137253593.js
deleted file mode 100644
index 90df091bb..000000000
--- a/api/search.index/504137253593.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUEAAKYYpxizG+FGAAB7GHwYyhv8G/0b/hv/GwAcARwCHAMcCRwNHA4cexwFAEYAAAC6G3OOGiOBAqAgAAAXkmFkKwKwQBfbAAFvcncAAIWgYAAAHGCwQBmQAAEkUAQ6MAAAAQAAAAAACQAQAAAA2gzbDEYNRw1RDcUXaBhvGHAY0xzzAAFl8nMBAAABAA==")
\ No newline at end of file
diff --git a/api/search.index/504a0f56e710.js b/api/search.index/504a0f56e710.js
new file mode 100644
index 000000000..2cbe28977
--- /dev/null
+++ b/api/search.index/504a0f56e710.js
@@ -0,0 +1 @@
+rn_("BQJGAAAhYxuOGwwdBi0dCDkdaXN0JxoVAEEAABQCHAMcbeQa5RoTBAKgIAAAG0VpcvfJGAAAAQA/AQEAKwEyADIBkwCEsEAYMgLhsJAcWQABFCEAOjAAAAEAAAAAAAgAEAAAAMEX5xfoF5sanBr8Gv0aChsLGw==")
\ No newline at end of file
diff --git a/api/search.index/50e200c5a3c7.js b/api/search.index/50e200c5a3c7.js
new file mode 100644
index 000000000..a6e7626a2
--- /dev/null
+++ b/api/search.index/50e200c5a3c7.js
@@ -0,0 +1 @@
+rn_("ZQBCAAADdhdh3RHeEd8R4BHhEeIR4xH1AkAAAAPmEAFrDRIPGzQdYWV1aA5pDmoOaw6nFnsX9Bn1GYYahxq5GuwaHhtYG8Uc0hwrAqBgAAAYa3B0awOgAAAABE1kbnQ=")
\ No newline at end of file
diff --git a/api/search.index/5116d5bcb27d.js b/api/search.index/5116d5bcb27d.js
deleted file mode 100644
index ccd5fc43d..000000000
--- a/api/search.index/5116d5bcb27d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHDAAAK8BwNAB1ldCMGAqBgAAAcNGJwAeEYAADzBQFjAXkcAAAFAsEAAAJWEwJXEwNwFmttdAUBwAAADNIbCcsZY3P7AmVzBQHFAAAJNRwKWxxjZUsDoCAAABf2oFAAABnfYWVpBQLIAAAC8RoJoBwKuxxhZXNLA6CQAAAZyqDAAAAa8GNsc6cYAMmAAwcM0E+gUAAADjigcAAAFm+g4AAAG9GgUAAAEMNCB6ADOjAAAAEAAAAAAAcAEAAAABYAFwAYABkAHQBOAU8BVAE=")
\ No newline at end of file
diff --git a/api/search.index/511c2a295ca9.js b/api/search.index/511c2a295ca9.js
new file mode 100644
index 000000000..780dfd2f0
--- /dev/null
+++ b/api/search.index/511c2a295ca9.js
@@ -0,0 +1 @@
+rn_("BQHAAAASthicHBmlHDEdaW8TAAOwMBnbAvmwMBncAAFmaXA6MAAAAQAAAAAADgAQAAAAiBYSGBMY/hgFGgYaBhsOGzUcdxx4HL4cyhzLHAIdI4ICoDAAABkBZnMrAqCgAAAbZmZ0")
\ No newline at end of file
diff --git a/api/search.index/51b8e5ca24e7.js b/api/search.index/51b8e5ca24e7.js
deleted file mode 100644
index 644e5b040..000000000
--- a/api/search.index/51b8e5ca24e7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUYAAOAb4RviG+MbFQBRAAAGDR1kzxz8HBsCoAAAABCfYW9hRgAAfRrHG8sbBhwKHHEc1xwTAAOgUAAAHJygkAAAGdViY3A6MAAAAQAAAAAAJgAQAAAAuQy6DLsMvAy9DL4MvwzADMEMTBOIFokW7RbuFjYXRRfBF8oXDRgOGGQYahirGL4YvxjUGOEZ4hnsGe0ZiRroGuoaQBv5G/obQBxBHGocBQBUAAAGDh1k/xwFAEsAAAYSHWQEHRsCoLAAABwEYW8BgwKgkAAAHIChEAAAHN1pdRsCsFAYWQLXYWU3DgCIoLAAABvAsCAXEAABoEAAABcuKPAFOzAAAAEAABMABQDZCAAAegoPAK4QAAC6EAAAzBEAAFuEoBAAAB0HsEAYgQKwkABEAQECsGAc5AABoHAAABnUZWY7MAAAAQAASQAKALQKAgCzDAEANw4AAD0OAABUEh4AMBgAADMYHgCjGQEAoBoAACccAAA [...]
\ No newline at end of file
diff --git a/api/search.index/51c916957e08.js b/api/search.index/51c916957e08.js
deleted file mode 100644
index 7a741457b..000000000
--- a/api/search.index/51c916957e08.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUEAAM0bRhxHHAUBwAAAEDoWZhgBOxZkbwGBAqDQAAAcraEwAAAc3mFwpwEDhqBQAAAYs7BwGsMAAaDAAAAcRTRBEPVKDQAAAQBhChoB9AA=")
\ No newline at end of file
diff --git a/api/search.index/51d87a33d066.js b/api/search.index/51d87a33d066.js
new file mode 100644
index 000000000..c5aabd8cf
--- /dev/null
+++ b/api/search.index/51d87a33d066.js
@@ -0,0 +1 @@
+rn_("BQHBAAAMRhwJsxpjcwUAQwAAAcMcZbQa8wgBbAHyFwAAMUMAABMaFBpKG+sbBQBHAAAMRR1hehwjAwOgIAAAHPCgYAAAGxdydHYBihwAAPsDaG9yJwQAiKCgAAAasrDgHPMAAaBwAAAdQaCgAAAZ66CQAAAZDKDQAAAcoRWEBwGWEwAA")
\ No newline at end of file
diff --git a/api/search.index/5204fa79ccca.js b/api/search.index/5204fa79ccca.js
new file mode 100644
index 000000000..1e4803e45
--- /dev/null
+++ b/api/search.index/5204fa79ccca.js
@@ -0,0 +1 @@
+rn_("MUAAAK0XrhfkF+UXBQFDAAAGAR0CnxxichccI4cCoEAAABxXZnMbAqBwAAAYm2FyBQBEAAAAOBtz0xq3AADGoIAAABicoDAAABDSoGAAABzhAAigCzowAAABAAAAAAAKABAAAADGCMcIOxdgF6UXphcbGC4YnRrCGl0b")
\ No newline at end of file
diff --git a/api/search.index/3e8424e22257.js b/api/search.index/524531fcd808.js
similarity index 50%
rename from api/search.index/3e8424e22257.js
rename to api/search.index/524531fcd808.js
index b591de14b..cffb1381a 100644
--- a/api/search.index/3e8424e22257.js
+++ b/api/search.index/524531fcd808.js
@@ -1 +1 @@
-rn_("BQHEAAAR1BtNHAV0HGVyEwUCoCAAABnQYnL2OBcAAAEApgABADMAtgDlAUEAAAQLGBbuG+8bZnByF4wZsRr6Gvsa/Br9Gv4a/xpFG0YbRxtIG0kbShv7Am50")
\ No newline at end of file
+rn_("AQEAOzAAAAEAAKMAAgB7EwEAsRWhAAUARgAABlcdZE0d8wEBYQFUDQAANwAAxaAAAAAQ5aBwAAAc3aCAAAAawAABSCEBgQoAAA==")
\ No newline at end of file
diff --git a/api/search.index/52665d1e8641.js b/api/search.index/52665d1e8641.js
deleted file mode 100644
index 2ece382f2..000000000
--- a/api/search.index/52665d1e8641.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("UUMAAEMTRBNFE0YThhaHFgUBwAAADKIcCDgcZW4FAEoAABTHHMgcbaccFQBGAAAUaxxsHG1DHMMc84EDZnBzq4SgMAAAF/egIAAAHQERAQg=")
\ No newline at end of file
diff --git a/api/search.index/52a0ab221d51.js b/api/search.index/52a0ab221d51.js
new file mode 100644
index 000000000..c1da2826d
--- /dev/null
+++ b/api/search.index/52a0ab221d51.js
@@ -0,0 +1 @@
+rn_("IUIAAJgXmReaFxUARQAABd8cY4EcghwFAEkAAAYbHWKsHFOFA6AAAAAZFGZzd1MAA7AwGL0Cs2RoafJTDgAAPwo=")
\ No newline at end of file
diff --git a/api/search.index/530ac0888d0e.js b/api/search.index/530ac0888d0e.js
deleted file mode 100644
index c638e1abf..000000000
--- a/api/search.index/530ac0888d0e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHEAAAobhyrHKwcBN4cYW8bAqBgAAAa3GFlBQLAAAADkRwEwhoisRiyGD0cZW95FQBKAAAGDh1kwRz/HAUBwAAAAlocCe0caW8TBwKgMAAAHJJmaff0GwAAQgABAEUADAABADYAGwKwMBqgAYdhciFFAADLHNoc2xwlAEAAAAPzG2nPG9AbSBwhQgAAwRnCGV0cMUEAAL8awBrBGo0cBQHAAAAVzBu+HALyG3V58wGEAgEDOjAAAAEAAAAAAAwAEAAAAMwXrBitGK4YrxiwGGoa+BrWGzwcoxyuHNgc+wJlbPMAA3B0dfU3FgAAXgMBAEEBawCFAUIAAAGpGgTlG2lzQxeYGJkYrxmwGfcaPBs9GyMcFQBBAAAF6hp3ehd7FxUAQAAAFMccyBxtsBqnHPsCZG4xSAAAgBoiGyMbaRxFAEMAAADcG3NxGJMZQxtEGxYcKwKgQAAAGuthaQUAQAAAJUAb+Rv6G3dRGhs [...]
\ No newline at end of file
diff --git a/api/search.index/533634dc4f6b.js b/api/search.index/533634dc4f6b.js
new file mode 100644
index 000000000..542e5d963
--- /dev/null
+++ b/api/search.index/533634dc4f6b.js
@@ -0,0 +1 @@
+rn_("IUIAAJgXmReaFxUARQAABd8cY4EcghwFAEkAAAYbHWKsHFOFA6AAAAAZFGZzd/OBAmRpBQHBAAAFjRoXIhkjGWVpEwACoAAAABtaYXP1fQ4AABwIhwDJA/oBbwDFsBAWkAJGoBAAAA55WnanvhrHQAIAig==")
\ No newline at end of file
diff --git a/api/search.index/5388d4efacbe.js b/api/search.index/5388d4efacbe.js
deleted file mode 100644
index 36a026735..000000000
--- a/api/search.index/5388d4efacbe.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHBAAAE4RwF7Bxxc/MBAXI7MAAAAQAAIgANADwWDQDUFwMAchgAAMAYAQDiGAAAqhkAAMQZAwDVGQAAZxoBAMUaAQA7GwAAFxwAAGYcAAA=")
\ No newline at end of file
diff --git a/api/search.index/53afdf78593b.js b/api/search.index/53afdf78593b.js
deleted file mode 100644
index 404696c02..000000000
--- a/api/search.index/53afdf78593b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUMAANIRGhw7HGUEQgAAFu4Z7xkLGhwMOhwE/hcMOxxmbXJ1d8kMygzLDMwMDA0NDQ4N1QJAAAAEKhgU3RreGgCFDmZtc04NTw1QDbQXtRe2F7cXfBm/GsAawRqFHIccjRx7hKAQAAAYVggQBg==")
\ No newline at end of file
diff --git a/api/search.index/53cff2f27c33.js b/api/search.index/53cff2f27c33.js
new file mode 100644
index 000000000..cf41ef919
--- /dev/null
+++ b/api/search.index/53cff2f27c33.js
@@ -0,0 +1 @@
+rn_("BQLGAAACMBsJ4xwK/hxhZXMVAEAAABL/EOgRdaQLpQsFAEQAAAZKHGakGAUAQwAABGIcdXcX8wIBb/JWDgAAlAP7A2hvciUAQQAACBwcYmMOGRkUGzUBQgAAUSEYIhgjGAcashrEGhXRGk0caXMIGwkbExxGHDFEAABhGGIYCBqzGmUARAAABlAdZO8Z8BnZGtoa6xzsHDsdUwEDsDAbBwH3Y2509/oMAADICQEASgEUAc0A0gBRQwAAdRN2E3cTeBO+Fr8WBQHAAAAM5RwIeRxlbgUASgAAFAodCx1t6hwVAEYAABStHK4cbYQcBh3zgQNmcHNTgQOgIAAAHUVlaXVbA6AQAAANamdubwUAQAAAAqgWeZ0MDwjIoMAAABxGoCAAABOIoCAAABOJoGAAABd7oKAAABtaoIAAABn2oJAAABqzAAHNAwUBxwAAAcQaBU0caXMbhLAQDWgAAaCAAAAaiaBQAAAYl0QQAtc [...]
\ No newline at end of file
diff --git a/api/search.index/53ff9a72e360.js b/api/search.index/53ff9a72e360.js
deleted file mode 100644
index 36f60b735..000000000
--- a/api/search.index/53ff9a72e360.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUUAAL4YvxjqGgUBwAAAIIEMggyLGQJPGmh5BQBFAAAGcRxiiRoFAEAAAATmG2MaG/MCAnN3AZMaAAArAqBgAAAZ1GFpFQBDAAAEmBpm0BzRHBUARgAABN4bZt8c4BwFAcAAABTkHOUcNYAaIhsjG2kcYWXHAgCGoMAAAByboPAAABzOsAANAgx8JGAG89IIAAANCe8HNwMAhqAwAAANM6CAAAAbqjABFTswAAABAABXABQANgQBAK4HAQC0CgIAswwBAEgNAAAsDgAANw4AAD0OAACkEAAAVBIeAEgTAABqFgAAdxcBAHoXAQAwGAAAMxgeAKMZAQCgGgAAJxwAALIcAAA=")
\ No newline at end of file
diff --git a/api/search.index/541bf6f5bf69.js b/api/search.index/541bf6f5bf69.js
deleted file mode 100644
index 5d7c959f9..000000000
--- a/api/search.index/541bf6f5bf69.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBSAAAGDR1k/BwFAFQAAAYOHWT/HPOEAnB0BQBRAAAGCh1k8RwFAFgAAAYTHWQJHQUAUgAABhEdZAIdBQBPAAAGDB1k9xzzhwJjcAUASQAABvkcZMocE4QDoMAAABzYoIAAABy3ZnBzGwKhQAAAHPZmbAUAWgAABhIdZAQd+wJhZacZAMkm0q/v8tigwAAAHFigwAAAHFmgMAAAF8kAC4QdATMbAAAFAcEAAAThHAXsHHFz8wIBcjswAAABAAAiAA0APBYNANQXAwByGAAAwBgBAOIYAACqGQAAxBkDANUZAABnGgEAxRoBADsbAAAXHAAAZhwAAPsCaXk=")
\ No newline at end of file
diff --git a/api/search.index/54a933e94002.js b/api/search.index/54a933e94002.js
new file mode 100644
index 000000000..045d17162
--- /dev/null
+++ b/api/search.index/54a933e94002.js
@@ -0,0 +1 @@
+rn_("BQHAAAABdg4KVBtlaQUBRAAAB+0bBwUdY3NrGwEBAbAAEdoAAXM7MAAAAQAAEwAJAPIMAABxDgQALBgBADQYAQBpGAEAjhgBACsaAQBoGwEAOBwBAEsDoEAAABzyoIAAABrPY2x0JQBHAAADUxtmUBj5GvoaFQBCAAADdRdh2BHZEUsDoLAAABvsoGAAABkfY250BQHCAAALYBw0phynHNgc2RxhZQEAz6AwAAAc1aBAAAAZB0LcLBf6FaAgAAAOcKAwAAAR17BwG/wAAQX4P0rhWLAwGG0EsD6qJwtx4KBAAAAWVxmyRYbpfWiG1Y08k6BgAAAanV7QgOzHiLAgGDYAAcDuJE87MAAAAQAAvQEGADYEAAAqBegA/wwAAEsOAAAwD9AABxIAAA==")
\ No newline at end of file
diff --git a/api/search.index/54f6b0293541.js b/api/search.index/54f6b0293541.js
new file mode 100644
index 000000000..1e6904013
--- /dev/null
+++ b/api/search.index/54f6b0293541.js
@@ -0,0 +1 @@
+rn_("9QBAAAAFcRd1sgqNDI4MjwyQDJEMkgyTDJQMlQyWDGQXZRc4G0sbHRwxQwAAFhkmGwkcbxwFAcEAAAVLGwYoHGZuNQBAAAAEyRxwAhsDGy0c3BwFAcAAAAf8HAFRHGFvBQHEAAACMx0BLx1hbyOFAqAAAAAcyGRmBQHEAAAGJB0DFB1vdBsCoOAAAB0/aG9nNAGKoFAAABqFoDAAABx0oYAAAB1UsEAcrQABoEAAAByyLpgHOjAAAAEAAAAAAAkAEAAAAG0Obg5vDooaixqTGhwcYRyEHAYdFQBDAAAOGB1jSxhMGEOBA6BAAAAY1rAQFyIAAWFpblcJAImgQAAAHKCggAAAGKGwYBhNAAGwIA5RClmgMAAAFlQSsQc6MAAAAQAAAAAALAAQAAAA2whvCnAKcQr1EOkR/hFVFqAWoxa8Fr0WPBdhF4kXihfCF0UYRxhmGK0Y0BnoGdMa1xruGjIbMxs/G0AbQRtCG1c [...]
\ No newline at end of file
diff --git a/api/search.index/54ff29f11791.js b/api/search.index/54ff29f11791.js
new file mode 100644
index 000000000..4f19e529e
--- /dev/null
+++ b/api/search.index/54ff29f11791.js
@@ -0,0 +1 @@
+rn_("IUMAAP8RWxx8HGUEQgAAFisaLBoLWxwMexwEOBgMfBxmbXJ1d+oM6wzsDO0MLQ0uDS8N1QJAAAAEZhgUHBsdGwCqDmZtc3ANcQ1yDe4X7xfwF/EXuRn+Gv8aABvHHMkczxx7hKAQAAAYkggQBg==")
\ No newline at end of file
diff --git a/api/search.index/5542a9b3426a.js b/api/search.index/5542a9b3426a.js
deleted file mode 100644
index 29ec2e31b..000000000
--- a/api/search.index/5542a9b3426a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBEAAAGDh1kwRz/HCMAAqCAAAAcc2Ns99wMAAB2AAEAAQDjCS0DhQJBQQAAxBDFEEwWBhutHFsDoAAAAAjRZWt5")
\ No newline at end of file
diff --git a/api/search.index/556b0790fb10.js b/api/search.index/556b0790fb10.js
new file mode 100644
index 000000000..fb637c472
--- /dev/null
+++ b/api/search.index/556b0790fb10.js
@@ -0,0 +1 @@
+rn_("QUIAAG0YbhgFHAMdHR0hQQAADhyHHIgcBQHAAAAQchaiGAFzFmRvAYECoNAAABzwoTAAAB0iYXAFAEYAABB5G5cccigb8wMBcAGkFgAAGwKgQAAAGO9hb7cBAoawcBsCAAGgwAAAHIY0QRD1bA0AAAEAeQocAfUA+wJlcw==")
\ No newline at end of file
diff --git a/api/search.index/5573c95db5b5.js b/api/search.index/5573c95db5b5.js
deleted file mode 100644
index 2cece718e..000000000
--- a/api/search.index/5573c95db5b5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBFAAAGxxtiwRcFAEcAABa0HLUcZsYbE4MCoDAAABm7cHMbAqBwAAAbH2FlCQKhAAAAHJ+gsAAAHGBhb0sDoEAAABuroKAAABvrY3F0BQBJAAAGnhx2HhsVAE0AAAYNHWTPHPwc8wABdAFjCgAABQHAAAAGeRwBrhszcQUBwAAAAuUaBEIcaW9HAoSGoDAAABvpoCAAAButoHAAABwwoDAAABvqwIgDI4ECoGAAABscY3RXHgCJoJAAABsdoPAAAByRoUAAABzGHJEWAT4NAAA=")
\ No newline at end of file
diff --git a/api/search.index/557db927971e.js b/api/search.index/557db927971e.js
deleted file mode 100644
index d20af90ad..000000000
--- a/api/search.index/557db927971e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAADXBwBJw5hbwUBwAAAA2MaEuEXgxpydRUARAAABg0dZM8c/BzzAgFiAaocAAAbAqBAAAAadml0MUMAAKEaohqjGqQaFQBFAAAG+Rxkyhz2HNMBhKDAAAAcaCCgAveyEAAAAQCeAgEA7APxAJEDFQBBAAAQwxrEGnNLGkwaEwICoDAAABjaaW47MAAAAQAACgAFAMsQAAALGAAAqxkAAAAbAwBLGwMAOwOwQBpJADVlbHjrBKBQAAAQ0Thpb3I=")
\ No newline at end of file
diff --git a/api/search.index/55e1068ff698.js b/api/search.index/55e1068ff698.js
deleted file mode 100644
index e4e0c1a3d..000000000
--- a/api/search.index/55e1068ff698.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAEoRl04BoTggKw8ByUAAFlcwEBAaEAAAAcKHTz2ggAAAEAAQAxQgAAahZ3F3gXshwFAEUAABCqF6sXcyYXSwOgUAAAFmiwEAqKDF1kbnL7hBBJAA==")
\ No newline at end of file
diff --git a/api/search.index/55f684b1c347.js b/api/search.index/55f684b1c347.js
new file mode 100644
index 000000000..fe8fb2940
--- /dev/null
+++ b/api/search.index/55f684b1c347.js
@@ -0,0 +1 @@
+rn_("BQHAAAADnhwBSw5hbwUBwAAAA6IaEhsYwhpydRUARAAABlEdZBIdQB3zAgFiAe0cAAAbAqBAAAAatWl0MUMAAOAa4RriGuMaFQBFAAAGPR1kDR06HdMBhKDAAAAcqiCgAvfcEAAAAQCmAgEA9APzAJYDFQBBAAAQAhsDG3OKGosaEwICoDAAABkWaW47MAAAAQAACgAFAPUQAABHGAAA6BkAAD8bAwCKGwMAOwOwQBqIADVlbHjrBKBQAAAQ+zhpb3I=")
\ No newline at end of file
diff --git a/api/search.index/561714c967b5.js b/api/search.index/561714c967b5.js
deleted file mode 100644
index a0720ee71..000000000
--- a/api/search.index/561714c967b5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAGXxgHOxtlb/UAQgAAEtAa8Bx1RA5FDkYORw5vFkEXtxm4GUcaSBp6Gq0a3xoZG4MckBwbAqAAAAAcEGlzFQFDAAAGvhwCXRxicvga1hsFAEEAABTHHMgcbaccJQBEAAAA3BtzQxtEGxYccwQEoKAAABzeZmlzdgG5HAAAE4ICsCAYEQABaW77A2Fvcg==")
\ No newline at end of file
diff --git a/api/search.index/5633d8a86493.js b/api/search.index/5633d8a86493.js
deleted file mode 100644
index 939038f31..000000000
--- a/api/search.index/5633d8a86493.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBDAAAGCh1k8RzzAAFzOzAAAAEAABQACgA8DQEAexgBAMobAADVGwAA/BsHAAkcAAANHAEAThwAAHscAAC0HAEARQBBAAAUUhxTHG0nGCgYKRgbHBwcBQBFAAAEFBxlzxkbAqAgAAAaZXV5MwKEsCAXRgABoEAAABpmAgEDOjAAAAEAAAAAAAsAEAAAAMwQThZPFjAXMReAGAgbJhs+Gz8bTBy3HOFGAAB7GHwYyhv8G/0b/hv/GwAcARwCHAMcCRwNHA4cexwFAEgAAAC6G3OOGisCsEAX2wABb3IzAgOgYAAAHGBjZm/32gwAAAEAdgB0CqMABwABALMABKAQAAAa3GFkdnk6MAAAAQAAAAAAFwAQAAAAIg4xDjsXPBfSF7wZexp8GoAahhrYGiIbIxs3G80bRhxHHGgcaRxuHHIccxyrHKwc")
\ No newline at end of file
diff --git a/api/search.index/565aeb77ad82.js b/api/search.index/565aeb77ad82.js
deleted file mode 100644
index 42aa5c113..000000000
--- a/api/search.index/565aeb77ad82.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUQAAPAY8RjwGjgbBQBRAAAGEh1kBB0FAcQAAChuHKscrBwE3hxhbxsCoGAAABrcYWUhQgAAsRiyGD0cBQHAAAAyJRgmGMsZdBoDwhprcEUCQQAAFYoYixgaGBwZHDNVF1YX1Rg5G29zdAgNCQ0KDQsNShobA6AgAAAckbAQFn0BNm5zeAUBxAAAAVQXAvkXYXW/AYWgAAAACM6RQEAVAEgAAAYOHWTBHP8cI4ECoHAAABl0ZW0FAcAAAAJaHAntHGlvEwcCoDAAABySZmn39BsAAEIAAQBFAAwAAQA2ABsCsDAaoAGHYXIhRQAAyxzaHNscJQBAAAAD8xtpzxvQG0gcIUIAAMEZwhldHDFBAAC/GsAawRqNHAUBwAAAFcwbvhwC8ht1efMBhAIBAzowAAABAAAAAAAMABAAAADMF6wYrRiuGK8YsBhqGvga1hs8HKMcrhzYHPsCZWwFAEIAAAYRHWQCHVFAAAC9F4Q [...]
\ No newline at end of file
diff --git a/api/search.index/56659bf26095.js b/api/search.index/56659bf26095.js
deleted file mode 100644
index 366075793..000000000
--- a/api/search.index/56659bf26095.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUkAAJwanRqeGp8aUUMAAEMTRBNFE0YThhaHFgUBwAAADKIcCDgcZW4FAEoAABTHHMgcbaccFQBGAAAUaxxsHG1DHMMc84EDZnBzWwOgIAAAHQFlaXUxQwAAURtSGzUcVBzjAISwoBpLAAGAKAg6MAAAAQAAAAAAEQAQAAAAVQxWDFcMWAxZDFoMWwxcDF0MOA6xELkQYBbbF9wXcxiJGJwc")
\ No newline at end of file
diff --git a/api/search.index/56f179ae706e.js b/api/search.index/56f179ae706e.js
deleted file mode 100644
index bbba0c0dd..000000000
--- a/api/search.index/56f179ae706e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBSAAAGDR1k/BwFAFQAAAYOHWT/HPOEAnB0BQBRAAAGCh1k8RwFAFgAAAYTHWQJHQUAUgAABhEdZAIdBQBPAAAGDB1k9xzzhwJjcAUASQAABvkcZMocE4QDoMAAABzYoIAAABy3ZnBzGwKhQAAAHPZmbAUAWgAABhIdZAQd+wJhZacZAMkm0q/v8tigwAAAHFigwAAAHFmgMAAAF8kAC4QdATMbAAAJAlOI1O+svrAgFvAAAWVuBQBDAAAEeBx12RjzAgFv8mYWAAABAWUAQwAABs4bcrYYtxi4GLkYuhi7GLwYdwEAhaAQAAAOMIFBQAF6DAAA")
\ No newline at end of file
diff --git a/api/search.index/570767d40c61.js b/api/search.index/570767d40c61.js
new file mode 100644
index 000000000..4dde06936
--- /dev/null
+++ b/api/search.index/570767d40c61.js
@@ -0,0 +1 @@
+rn_("BQHEAAARFRyOHAW2HGVyEwUCoCAAABoNYnL2chcAAAEApgABADUAtgDlAUEAAARHGBYvHDAcZnCsF8kZ8Bo5GzobOxs8Gz0bPhuEG4UbhhuHG4gbiRv7Am50")
\ No newline at end of file
diff --git a/api/search.index/577df1a49db1.js b/api/search.index/577df1a49db1.js
new file mode 100644
index 000000000..24a40869c
--- /dev/null
+++ b/api/search.index/577df1a49db1.js
@@ -0,0 +1 @@
+rn_("FQBCAAAACRFzTQ4IEfUARgAACRYdcvoX1xjYGNkY2hjbGNwY3RjQGhgcGRwaHBsckByRHJocMUAAANEM0gylGLUaAQABoRAAAB0PdPLMCAAA1ABbA6DAAAAbH21ycwUBwAAAAdkQArgaZXkFAEUAAAxFHWF6HPFAAABVDnUXdhf5Gboauxq/GsUaYRtiG3YbqhyrHLAc7hzvHGsDoKAAAByKYXJzMUgAAL8aYRtiG6scJwABhbBAGSIAAaBQAAAcvIAZ0gARrqBAAAAc01AABzswAAABAAAlABIAgA4IAOIQAAD4EQAAqRYDAB8XAACEFwAAyRcBABcYAQDiGQAA/RkAAOoaAQDzGgUANBsAAFQbAABtGwEA7RsAAFYcAACkHAAABQHAAAACjxoEjhpkZwUARAAAB+IccLAW8wABdAExFwAABQBCAAADXxt3pxX/AIVRHCopXKkGYAIBAAKgQAAAHH+goAAAHBJmczo [...]
\ No newline at end of file
diff --git a/api/search.index/57876303dd27.js b/api/search.index/57876303dd27.js
deleted file mode 100644
index 64190f978..000000000
--- a/api/search.index/57876303dd27.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBEAAAWDRwOHGZvGHAYKwOgYAAAGFygMAAAGDBlb3IFAcEAAAJgFgwnHGZuBQHEAAABWhgF1Bppc/sCbG8FAcUAAAKtGQNyGmtuGwKgsAAAGzFjdTcCAIawABZdAAGgMAAAG8SgcAAAGFsVAgY6MAAAAQAAAAAADgAQAAAArgivCLAIsQjgCHgKWg56DnsOfA5UFlUW/hcfG7ob")
\ No newline at end of file
diff --git a/api/search.index/57ec07df249f.js b/api/search.index/57ec07df249f.js
new file mode 100644
index 000000000..331802f03
--- /dev/null
+++ b/api/search.index/57ec07df249f.js
@@ -0,0 +1 @@
+rn_("BQBAAAA0khwmHScdQh1sER0FAEIAAAJHHW08HSOFAqCAAAAdS2FrBQBFAAA0khwmHScdQh1sER37AnJzMUMAAM4aaxxsHM4cdQFCAAAB6BoEJhxpc9QY1RjsGe0ZNht7G3wbZBwhhwKggAAAHUsFYWtjAgOgoAAAHUFhY2sBixwAABUAQgAAB4AcbW8XSBgjgQKgMAAAGbpia/ODAmVpZQBCAAAGUB1k7xnwGdka2hrrHOwcOx0bAqAwAAAXaWRtRQBAAAAH+RtzqQqqCm8M5RGfFtUARQAABDYdZtQZ1RnWGdcZ2BnZGdoZ9RspHC4cMRzlHFMdVB0jAAKwgBw2AAFkbvXsEAAAHAEBAJMGLQKvH4mgIAAADmKgkAAAGQ6xQE0=")
\ No newline at end of file
diff --git a/api/search.index/58b201c48aa9.js b/api/search.index/58b201c48aa9.js
deleted file mode 100644
index 168898ed9..000000000
--- a/api/search.index/58b201c48aa9.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUoAAEsbTBtNG04bBQHCAABSghiDGIQYhRiGGIcYVNgZ2RnaGdsZ3BndGWt2UUoAAEUbRhtHG0gbSRtKG+uEsEAXTwABIBgC")
\ No newline at end of file
diff --git a/api/search.index/58cddc7feb42.js b/api/search.index/58cddc7feb42.js
new file mode 100644
index 000000000..106717a21
--- /dev/null
+++ b/api/search.index/58cddc7feb42.js
@@ -0,0 +1 @@
+rn_("AQUCsBAbRgFGoJAAAB0WaXI7MAAAAQAAEgAJAPoXAADXGAYAthkAANAaAAASGwAA+hsAABgcAwCQHAEAmhwAACsDoDAAABfNsJAcUwABYWVp")
\ No newline at end of file
diff --git a/api/search.index/58f8caa2580c.js b/api/search.index/58f8caa2580c.js
deleted file mode 100644
index 0549af279..000000000
--- a/api/search.index/58f8caa2580c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAABUTxPyFvMW9Bb1FvYWBPcWaHQFAcEAAAIlFgHCGnJ0MUIAACUYJhjLGXQaZQBDAAADPBdhsRGyEbMRtBG1EbYRtxEFAcAAAAhNGiVoF2kXahdvdQEAzaAgAAAOU1gkwdEn9qCwAAAZvLBAGIoAAT5mA6UTU6AwAAAYMmJwSrKjRaDAAAAbr2yx1+UDNUyWMWftE6BAAAAWJrBgF2sAAaAgAAAOVMDMMQ87MAAAAQAADQIGADEEAADZBsMA3wwAANkPwwDuFIEA8BYBAA==")
\ No newline at end of file
diff --git a/api/search.index/591fb3423456.js b/api/search.index/591fb3423456.js
deleted file mode 100644
index 77e2bca5f..000000000
--- a/api/search.index/591fb3423456.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHRBwDoRlpeRUATQAABPIcZg8dEB0VAEIAAAc/HG01FwwYBQBCAAAEUBtjrhoVAEIAAAJuGHJrFgkY84ECZWwVAEUAAAn2HGZZGDAbBQHBAAABfRkHMxtpcAGCAqCQAAAcgKEQAAAc3Wl1KwKgwAAAHK1ydPdhAMygEAAAGYGgQAAAGMyhMAAAHN6ggAAAGwuwUBzNAA/ADLULOjAAAAEAAAAAAAcAEAAAAM4MHQ66EV8T+RbgGoQchhw=")
\ No newline at end of file
diff --git a/api/search.index/59405b7bff5e.js b/api/search.index/59405b7bff5e.js
new file mode 100644
index 000000000..0c91aa6de
--- /dev/null
+++ b/api/search.index/59405b7bff5e.js
@@ -0,0 +1 @@
+rn_("FQFIAAAHzRwFnhxiZiMbKh0xSgAAPxtAG0EbQhsFAcIAAFIlGCYYJxgoGCkYKhhUJhknGSgZKRkqGSsZa3ZRSgAAORs6GzsbPBs9Gz4b44GEsEAWvAABIBgC+wJldA==")
\ No newline at end of file
diff --git a/api/search.index/59cdb689fd5c.js b/api/search.index/59cdb689fd5c.js
new file mode 100644
index 000000000..59bd2f89c
--- /dev/null
+++ b/api/search.index/59cdb689fd5c.js
@@ -0,0 +1 @@
+rn_("NQBAAAAjghcAGf8cdK0XrhfkF+UX9QBDAAASDxs0HXVoDmkOag5rDqcWexf0GfUZhhqHGrka7BoeG1gbxRzSHAUBQwAABgEdAp8cYnIXHCOHAqBAAAAcV2ZzOwOgcAAAGJthb3IFAcAAABHOEHoTCSobbnQFAEQAAAA4G3PTGgUDwAAACHYbBBoZA/AQMOAIdgp3Co8aZGxyeBUARgAAFk4cTxxmqxisGAUATwAABhcdZpgcYwADoFAAABvwbHJzAaIcAAArAqEwAAAczGJs9wUAyaCAAAAYnKAwAAAQ0qBgAAAc4UBMoAs7MAAAAQAA4gASAFcBAgB6AcYAMAQAAEUEAABQBAcAsQcAAMYIAQCjCgAA1xAAACEXAAA7FwAAYBcAAKUXAQAbGAAALhgAAJ0aAADCGgAAXRsAAA==")
\ No newline at end of file
diff --git a/api/search.index/59e09152a923.js b/api/search.index/59e09152a923.js
new file mode 100644
index 000000000..eaa92a9ed
--- /dev/null
+++ b/api/search.index/59e09152a923.js
@@ -0,0 +1 @@
+rn_("tQFCAAAE1xoDTBxmafgQ1hGJFooWixaoFgcYCBjBGtYaEx0UHRUARQAABgwcYgQY5xgVAUAAABmzGLQYKBIYExj+GG50ZxhoGDUARQAAFkkdSh1ktxy4HCsdLB0FAEEAAAZPHWQ4HRODAqBAAAAdFW1vawOwMBIMBv1hdHcVAEEAAAY3HWREG/kcKwKgEAAAHMBjZQkCoAAAAA1voQAAABzSZnPrhKDgAAAczhEBQFFIAAAOGA8YEBgRGPwY/RgFAcgAACh3HHgcvhwKBB10dfsCYXIBBQA7MAAAAQAAgwACAPUXAAAuGYIAMUIAAM0ZzhmNGp8aRwIAhqCAAAAbbKAwAAAdA6BgAAAc56AwAAAbQwEODAHJEAAAYUgAAFEYUhhTGFQYVRhWGFcYBQBEAAABYRxpVxvzBgFm8qAXAAB4ARsCoLAAABtYZWlRRwAAqRaqFqsWrBbJF8oXBQHAAABRTg4BGKYcpxzYHNk [...]
\ No newline at end of file
diff --git a/api/search.index/5a2c889b30b0.js b/api/search.index/5a2c889b30b0.js
deleted file mode 100644
index ee0575ee7..000000000
--- a/api/search.index/5a2c889b30b0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAFuRkEchxjcwUAQgAAAgMdbfgcI4cCoIAAAB0HYWsjDgKgoAAAHP1hYwFKHAAAS4QQHLtrxKCgQAAAGOSgUAAAGZQYAANrA6AAAAAa3DFlaQ==")
\ No newline at end of file
diff --git a/api/search.index/5a487b4ba270.js b/api/search.index/5a487b4ba270.js
new file mode 100644
index 000000000..17271e2f1
--- /dev/null
+++ b/api/search.index/5a487b4ba270.js
@@ -0,0 +1 @@
+rn_("IUEAAAsSyhrLGjUBQwAAFy0c3BwAKRdmc1gWWRZaFlsWBQBAAAADBRxq+xslAEMAABHDHN4cZbQa6BzpHGMBA6AgAAAbWmlsc/WoFQAASgLUAQEABgHfAIWwABEEB5KgEAAADlMpQAQ=")
\ No newline at end of file
diff --git a/api/search.index/5a5af73f3fc1.js b/api/search.index/5a5af73f3fc1.js
new file mode 100644
index 000000000..2341224b0
--- /dev/null
+++ b/api/search.index/5a5af73f3fc1.js
@@ -0,0 +1 @@
+rn_("BQHEAAAosBzuHO8cBCIdYW8bAqBgAAAbG2FlBQLAAAAD0xwEARsi7RjuGH4cZW95FQBKAAAGUh1kBB1DHQUBwAAAApwcCTEdaW8TBwKgMAAAHNRmafc1HAAAQgABAEYADAABADcAGwKwMBrfAYlhciFFAAAOHR4dHx0lAEAAAAM0HGkQHBEciRwhQgAA/hn/GZ8cMUEAAP4a/xoAG88cBQHAAAAVDRwBHQIzHHV58wGEAgEDOjAAAAEAAAAAAAwAEAAAAAYY6BjpGOoY6xjsGKkaNxsXHH0c5hzxHBwd+wJlbPMAA3B0dfVvFgAAYwMBAEMBawCFAUIAAAHoGgQmHGlzfRfUGNUY7BntGTYbext8G2QcFQBBAAAFKRt3tBe1FxUAQAAAFAodCx1t7xrqHPsCZG4xSAAAvxphG2IbqxxFAEMAAAAdHHOtGNAZghuDG1ccKwKgQAAAGyphaQUAQAAAJX8bOhw7HHeQGhs [...]
\ No newline at end of file
diff --git a/api/search.index/5a76a7be1ac7.js b/api/search.index/5a76a7be1ac7.js
new file mode 100644
index 000000000..2b430dc82
--- /dev/null
+++ b/api/search.index/5a76a7be1ac7.js
@@ -0,0 +1 @@
+rn_("BQBHAAAYGR0aHXf4GxUARAAABKAcZTIbMxsFAcYAAAcdHQUDHWZ0+wJhZlMBA4ATigAT42RydDswAAABAABxAQYA8RACABUSYQCaFgEAxBZaAC0aVwCTG1cA")
\ No newline at end of file
diff --git a/api/search.index/5aa0f9a302cb.js b/api/search.index/5aa0f9a302cb.js
new file mode 100644
index 000000000..6b6419912
--- /dev/null
+++ b/api/search.index/5aa0f9a302cb.js
@@ -0,0 +1 @@
+rn_("QUIAAIQXFxgYGFQb7RtlAEMAAAYZG3KRF5IXkxeUF5UXlheXFxsCoPAAABzOYXIFAEMAAAS6HHUVGfMEAW/ynhYAAAMBZQBIAAAGbhxyIBohGiIaIxokGiUaJhrHAQCFoKAAABtyoMAAABt1GCAF8nsMAABRCzsDoNAAABsfZWl1BQBAAAAQpA4wG25OBBUAQAAACtgadeUM5gyxQAAAzArUED8YQBhBGEIYQxhEGCAbIRtqHMwctQJBAAAm8BjxGBUbBhYbCEwdYm9yrAytDK4MrwywDLEMsgyzDJcWfhcNGQ4ZBQHAAAAP1RwInhphZTcAAIWgMAAAEgewMA6bAAGwYBsxAUE4QEA7MAAAAQAACQADAEQEAADPBwcAUg4AAC8PyaBAAAAcEqAQAAAdFrCwGzEBQaAgAAAWbgATjgo=")
\ No newline at end of file
diff --git a/api/search.index/5aadba7ecd24.js b/api/search.index/5aadba7ecd24.js
new file mode 100644
index 000000000..f82e320bf
--- /dev/null
+++ b/api/search.index/5aadba7ecd24.js
@@ -0,0 +1 @@
+rn_("FQBEAAAGUh1kBB1DHSMAAqCAAAActWNs9/0MAAB3AAEAAQD7CTIDigJBQQAA7hDvEIQWRRvwHFsDoAAAAAjlZWt5")
\ No newline at end of file
diff --git a/api/search.index/5b01c5a8b93d.js b/api/search.index/5b01c5a8b93d.js
new file mode 100644
index 000000000..055fe09f7
--- /dev/null
+++ b/api/search.index/5b01c5a8b93d.js
@@ -0,0 +1 @@
+rn_("BQBEAAADCRxuYRcFAcAAAAMiHVPnF+gXmxqcGvwa/RpsdSFIAACwHO4c7xz7AmFvVwAAhaBgAAAa8LBgGvEAAbAAHRAAEDSAAjswAAABAAAOAAUA7AgAAJEKAADNFwAAJhkFABUaBQAbAqAwAAAYOGV0")
\ No newline at end of file
diff --git a/api/search.index/5ba39e7d6a6b.js b/api/search.index/5ba39e7d6a6b.js
new file mode 100644
index 000000000..18514dddd
--- /dev/null
+++ b/api/search.index/5ba39e7d6a6b.js
@@ -0,0 +1 @@
+rn_("BQBCAAAA3hlzVBYFAcAAAAVLGwYoHGZuZQBDAAAFFxlyXxZgFmEWYhZjFmQWZRafAoagIAAAENKgcAAAHIWw8BxrAAERQUE=")
\ No newline at end of file
diff --git a/api/search.index/5bce554b15a5.js b/api/search.index/5bce554b15a5.js
new file mode 100644
index 000000000..3b093624e
--- /dev/null
+++ b/api/search.index/5bce554b15a5.js
@@ -0,0 +1 @@
+rn_("ZQBEAAAHJRtyNBc1FzYXNxc4FzkXOhcbAqAgAAAOV2F5AQAAOzAAAAEAABcABQCFDAcAzhcGAJQaBgAxGwAAchwAAAUAQwAABk4dZDUd8wIBc/JeDQAAAQAFAcgAAAdJHGC/GcAZwRnCGcMZxBnFGXJzBQBAAAAEJxxjWRvzAwFzAdIaAAATAQKggAAAG+tmcgFQDgAABQHAAAASthicHBmlHDEdaW8TAAOwMBnbAvmwMBncAAFmaXA6MAAAAQAAAAAADgAQAAAAiBYSGBMY/hgFGgYaBhsOGzUcdxx4HL4cyhzLHAIdKwKgMAAAGQFmc/sCY25lAEQAAAYPHHLyGPMY9Bj1GPYY9xj4GCsCoGAAABqgY3TFAEUAABYvHDAccKwXORs6GzsbPBs9Gz4bhBuFG4YbhxuIG4kb+wJsciFEAADyG/MbwRy3DwCJoIAAABkWoFAAABsnNGEWOjAAAAEAAAAAAAwAEAAAAD0 [...]
\ No newline at end of file
diff --git a/api/search.index/5befc964cb41.js b/api/search.index/5befc964cb41.js
deleted file mode 100644
index 93d4886ad..000000000
--- a/api/search.index/5befc964cb41.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBCAAAAoRlzHRYFAcAAAAUMGwbnG2ZuZQBDAAAF2xhyKBYpFioWKxYsFi0WLhafAoagIAAAEKigcAAAHESw8BwqAAERQUE=")
\ No newline at end of file
diff --git a/api/search.index/5bff864c7d0b.js b/api/search.index/5bff864c7d0b.js
new file mode 100644
index 000000000..6d6f68b14
--- /dev/null
+++ b/api/search.index/5bff864c7d0b.js
@@ -0,0 +1 @@
+rn_("MUAAANsa3BrdGt4aBQBKAAAGtBx22hwFAEUAAAxFHWF6HCOBAqCgAAAcimFzJQBAAAATxhfHF2kJGAoY+RhBQgAA7hDvEIQWRRvwHAUBwwAABvUcAMUXbXO1AUEAABQCHAMcAIMWbXNeDg8SEBIREhISExIUEgoZCxm3GuQa5RoFAcAAAAULGBLDF8QXdXnnLgDKoMAAAB1FoHAAABiwsGAYDAMLwECoGzswAAABAAArAA4AyQoCALUMFgDKEAMAlBMBAOsXAADJGAEACRoBADUbAABnGwAA7BsAAHocAACKHAAAmRwAAPIcAAA7A6AgAAAbW2Flbw==")
\ No newline at end of file
diff --git a/api/search.index/5c218a71302d.js b/api/search.index/5c218a71302d.js
new file mode 100644
index 000000000..927103e32
--- /dev/null
+++ b/api/search.index/5c218a71302d.js
@@ -0,0 +1 @@
+rn_("FQBFAAAItRxjoxotHQUBwAAAA7UYBGMcYW/zAAJ0dff0EAAAhAEBAAEAoQYBAIUBVQBAAAAFyRplrhavFrMYtBjGGscaGwKwYBrKAAFmdBsCoGAAABoLZW8BAQOgQAAAHLmwQBsrAAGgAAAAF8tmbXM7MAAAAQAAFQAHAEwXDgDVGgAAYxsAAI4bAAB5HAAADB0AAD4dAQAHDQCJoEAAABv0oDAAABj/oEAAAByboFAAABqioCAAABatoIAAAB05JwkHOjAAAAEAAAAAAAsAEAAAAF8Opw6oDqkOkxaUFogXJxr5G6UcBR0xHQ==")
\ No newline at end of file
diff --git a/api/search.index/5c41590a461b.js b/api/search.index/5c41590a461b.js
new file mode 100644
index 000000000..aef336aeb
--- /dev/null
+++ b/api/search.index/5c41590a461b.js
@@ -0,0 +1 @@
+rn_("AQEBoHAAABoRZjswAAABAABIAAkAzQoCANMMAQBhDgAAhBIeAGwYAABvGB4A4BkBAN8aAABoHAAARQBBAAAGNx1kVg1XDbEZRBv5HAUBwAAAAMAcBwIZc3R7hKEgAAAc8hSgAA==")
\ No newline at end of file
diff --git a/api/search.index/5c689458805a.js b/api/search.index/5c689458805a.js
new file mode 100644
index 000000000..8dc70cd66
--- /dev/null
+++ b/api/search.index/5c689458805a.js
@@ -0,0 +1 @@
+rn_("ZQBEAAAGDxxy8hjzGPQY9Rj2GPcY+BgjgwKgYAAAGqBjdCUAQQAAAwwZbrQM7RDzFwUBwAAAAVUNDdMcZXQFAcAAAAvAGgMsHGF03wGFsAAZ5gMiDGAC")
\ No newline at end of file
diff --git a/api/search.index/5cd4ab726018.js b/api/search.index/5cd4ab726018.js
deleted file mode 100644
index 560a8b806..000000000
--- a/api/search.index/5cd4ab726018.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAFJBwOjhwYUxtVHGVpbUUAQwAAAwscac4QURZSFlMWghoFAcMAAArwHA0AHWV0IwQCoGAAABw0YnAB4RgAABUAQAAABtMZYs0QuxnzgQJudBMAA6BgAAAcwqBwAAAa5mNucjswAAABAAAHAAIA+hYGAHkcAAAFAcAAAAQ1GwLbGHB1BQHBAAAy2RraGu4azhsW0RnSGWVpY4EDoOAAAByKY3FzBQHAAAA11RtOHLQctRwMvRxhafMEAWb04hcAAOQD2QAnADFGAADiGGcaaBpmHPOCAnB2BQHEAAAR1BtNHAV0HGVyEwcCoCAAABnQYnLz3xcAAAEA6QAFAsAAABnkG1scCzcbZJQXlReWF5cXmBeZF5oXY254VQBAAAAGEh1ksByxHN0c5BzlHAQdIUYAAN0X3hesGwUBwAAAE3kWehY3URtSGzUcVBxtbmsDoDAAABgKYW9yBQHBAAAWJhwAHQRJF2NpAQD [...]
\ No newline at end of file
diff --git a/api/search.index/5d25e2a9423a.js b/api/search.index/5d25e2a9423a.js
new file mode 100644
index 000000000..7b18c4106
--- /dev/null
+++ b/api/search.index/5d25e2a9423a.js
@@ -0,0 +1 @@
+rn_("MUkAAD8bQBtBG0IbBQBCAAAGVR1kRh3zAAFtAccQAAAFAcAAABG6GLsYCBYdZW9xQQAAjhaPFh8YIBjjGekZRhuMHAUASgAABk4dZDUdZwMBhqAwAAAYkKAgAAAYuYIJAzowAAABAAAAAAAdABAAAAC5FrsW6RfqF/oXmRiaGNcY2BjZGNoY2xjcGN0YthnQGhIbZBv6GxgcGRwaHBscUxxUHGUckByRHJoc4RwFAEIAAAJHHW08HSOHAqCAAAAdS2FrIwsCoKAAAB1BYWMBixwAADuEoCAAABqloIAAABzRCECEUwADsHAc1gABaXB0ASkXAAA=")
\ No newline at end of file
diff --git a/api/search.index/5d7298470ead.js b/api/search.index/5d7298470ead.js
new file mode 100644
index 000000000..a37473737
--- /dev/null
+++ b/api/search.index/5d7298470ead.js
@@ -0,0 +1 @@
+rn_("BQJCAAAZKB0pHQcAHRjWHNccaXBzZhdBQAAAkAqMFo0WOBheG3UAQAAANrwaRxyzHBsdYn4TJxcoF6AYKRoqGsgarBzzBAFyAdgQAAAFAcAAAAQDHQLWEW95BQHAAAADtRoEwhxhb2FGAABMG00bThtPG1AbURtSGxUARAAABlEdZBIdQB3zAgJiaQHtHAAAIUMAANQajxsnHAUBRQAACXAcFSAbIRtkc3QX+wJhb5cBAIagwAAAHCmgcAAAHNWgQAAAFlY0AUT0cBYAAEwDMQFsAAUAQwAAEQ0ZDhllUg4VAEEAAAReHGYuHS8dtQBCAAAEfxxm0hHTEdQR1RHLGMwY4BrhGuIa4xoyHTMd+wJhbyUAQwAAGLsaqhxn6xlVG1YbIUcAAHIXcxdPGCFFAADzGUgbSRtlAEEAAAb5F2KzCrQKWQ1aDVsNXA1dDWUAQwAABj0dZCQXJRcmF58YKBoNHTodKwKg4AAAHNF [...]
\ No newline at end of file
diff --git a/api/search.index/5da7cadb7762.js b/api/search.index/5da7cadb7762.js
new file mode 100644
index 000000000..fad6e4f0c
--- /dev/null
+++ b/api/search.index/5da7cadb7762.js
@@ -0,0 +1 @@
+rn_("BQBCAAASjhiPGHMHEhUAQAAAFNQajxtjvBntGvMBAXPzZA4AAAEADw4FAcAAAAf8HAFRHGFvBQHEAAACMx0BLx1hbyOFAqAAAAAcyGRmBQHEAAAGJB0DFB1vdBsCoOAAAB0/aG83AgGIoDAAABx0oYAAAB1UsEAcrQABoEAAAByyoFAAABzJLJgD8oQcAACCACMChKBAAAAcoKAgAAAYqqAAAAAbOBABAzowAAABAAAAAAAIABAAAACgFqMWwhdFGGYY0xoyGzMbuRz7AmVs+wJpcg==")
\ No newline at end of file
diff --git a/api/search.index/5dc2c1f348f1.js b/api/search.index/5dc2c1f348f1.js
deleted file mode 100644
index ddbf73c5b..000000000
--- a/api/search.index/5dc2c1f348f1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAkhBo1GwgcAtsYcHUVAEYAABDLGswac9EZ0hlBQgAA2RraGu4azhstHPOBAmVpRQBCAAAY9Rv2G2TCENsR3BFgGIoaAQIAOzAAAAEAAMUAAgArDgAA4BDEAPMAAW07MAAAAQAAxwADALoIAACLCcUAShYAABUAQAAAJdQY4RniGXcmDoscBQBBAAAR0RjSGGUuDt8LyKDgAAAcirAwG8MAUUALyAE=")
\ No newline at end of file
diff --git a/api/search.index/5e07ded9448a.js b/api/search.index/5e07ded9448a.js
new file mode 100644
index 000000000..5175aabb9
--- /dev/null
+++ b/api/search.index/5e07ded9448a.js
@@ -0,0 +1 @@
+rn_("BQHDAAASuhbqGROGF7Eaa24lAEEAAAgcHGJjDhkZFBs1AUIAAFEhGCIYIxgHGrIaxBoV0RpNHGlzCBsJGxMcRhzzAgJrbwESHAAA+wJlbw==")
\ No newline at end of file
diff --git a/api/search.index/5e736abf9aab.js b/api/search.index/5e736abf9aab.js
deleted file mode 100644
index 1eee9a240..000000000
--- a/api/search.index/5e736abf9aab.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBAAAAE5htjGhvzAwFzAZMaAAATAAOggAAAG6qgMAAAGk9mcnQBLA4AAEMAhKBAAAAW5aAgAAAaULAQFvAAAUkABPLQCAAA6wg=")
\ No newline at end of file
diff --git a/api/search.index/5ec448d285df.js b/api/search.index/5ec448d285df.js
deleted file mode 100644
index c2bd2bb1b..000000000
--- a/api/search.index/5ec448d285df.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBEAAADNBts0xgwHDFIAACdHKEcsxy6HDFCAADFG9MbBxwRHAUBwAAADAAdDeYcYWgPB4eggAAAHLyggAAAHMWhUAAAHQigoAAAHPAeABzzgQJwdisCoCAAAByCb3I=")
\ No newline at end of file
diff --git a/api/search.index/5f0a1d3d62a1.js b/api/search.index/5f0a1d3d62a1.js
new file mode 100644
index 000000000..32fb9cc7f
--- /dev/null
+++ b/api/search.index/5f0a1d3d62a1.js
@@ -0,0 +1 @@
+rn_("BQHBAAAIbBsDQxthdDFAAACOCv4QCRHeGQUAUgAABlEdZEAdBQBUAAAGUh1kQx3zhAJwdAUAUQAABk4dZDUdBQBYAAAGVx1kTR0FAFIAAAZVHWRGHQUATwAABlAdZDsd84cCY3AFAEkAAAY9HWQNHROEA6DAAAAdHKCAAAAc+mZwcxsCoUAAAB06ZmwFAFoAAAZWHWRIHfsCYWWnGQDJZoKfzusdoMAAAByaoMAAAByboDAAABgDAAuEHQFyGwAABQHBAAAEJR0FMB1xc/MCAXI7MAAAAQAAIgANAHQWDQAOGAMArhgAAPwYAQAeGQAA5xkAAAEaAwASGgAAphoBAAQbAQB6GwAAWBwAAKgcAAD7Aml5BQBEAAAQ5BflF3NgFwUBwQAAEuIQ+BEBxRppb/sDYWJ0FQBGAAAWThxPHGarGKwYBQBPAAAGFx1mmBxjAQOgUAAAG/BscnMBohwAABMAAqBwAAAdNGFw8qM [...]
\ No newline at end of file
diff --git a/api/search.index/5f78e1014b53.js b/api/search.index/5f78e1014b53.js
deleted file mode 100644
index ee3b38c99..000000000
--- a/api/search.index/5f78e1014b53.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHFAAAobhyrHKwcBN4cYW8FAcAAAATCGiKxGLIYPRxveRUASgAABg4dZMEc/xwFAcAAAAJaHAntHGlvEwgCoDAAABySZmn39BsAAEIAAQBFAAwAAQA2ACFFAADLHNoc2xwlAEAAAAPzG2nPG9AbSBwhQgAAwRnCGV0cMUEAAL8awBrBGo0cBQHAAAAVzBu+HALyG3V58wGEAgEDOjAAAAEAAAAAAAwAEAAAAMwXrBitGK4YrxiwGGoa+BrWGzwcoxyuHNgc+wJlbPMAA3B0dQE3FgAAFQBBAAAF6hp3ehd7FxUAQAAAFMccyBxtsBqnHPsCZG5FAEQAAADcG3NxGJMZQxtEGxYcBQBBAAAlQBv5G/obd1Ea5xwCyaCAAAAb8aAgAAAXQ6BgAAAcfkBMBQs7MAAAAQAABgADAM0RAwBFHAAAuBwBABsCoAAAAA4vaXk=")
\ No newline at end of file
diff --git a/api/search.index/5f7db3db1a92.js b/api/search.index/5f7db3db1a92.js
new file mode 100644
index 000000000..38e331889
--- /dev/null
+++ b/api/search.index/5f7db3db1a92.js
@@ -0,0 +1 @@
+rn_("ZQBEAAAGDxxy8hjzGPQY9Rj2GPcY+BgjgwKgYAAAGqBjdCUAQQAAAwwZbrQM7RDzF/sCb3MFAcUAAAWfGhG7GqocZW9rhLAgDKUAAaCgAAAc0xEBAQ==")
\ No newline at end of file
diff --git a/api/search.index/5f8c8594b771.js b/api/search.index/5f8c8594b771.js
new file mode 100644
index 000000000..228e41018
--- /dev/null
+++ b/api/search.index/5f8c8594b771.js
@@ -0,0 +1 @@
+rn_("BQHAAAAH/BwBURxhbwUBxAAAAjMdAS8dYW8jhQKgAAAAHMhkZgUBxAAABiQdAxQdb3QbAqDgAAAdP2hvNwGGh6AwAAAcdKGAAAAdVKBAAAAcsqBQAAAcySyIAwUBwAAAB/scAVAcYW8FAcQAAAIyHQEuHWFvI4UCoAAAABzGZGYFAcQAAAYjHQMTHW90GwKg4AAAHT5obzcBhoegMAAAHHOhgAAAHVOgQAAAHLGgUAAAHMcsiANjAISgYAAAGAGgkAAAG3olgAABbg0AAA==")
\ No newline at end of file
diff --git a/api/search.index/602310fc8d3c.js b/api/search.index/602310fc8d3c.js
new file mode 100644
index 000000000..9bf84ff28
--- /dev/null
+++ b/api/search.index/602310fc8d3c.js
@@ -0,0 +1 @@
+rn_("FQFAAAAF5xkQkRaSFmVzcBNxEyFFAAAOHIcciBz7AmpwBQHBAAAEfBwMIB1pb/sCZW8VAEIAAAa0HHbaHNscBQBEAAAnDh0eHR8dc4YcM4IDsAAdGQABaW5z+wJhcg==")
\ No newline at end of file
diff --git a/api/search.index/6063271b6604.js b/api/search.index/6063271b6604.js
new file mode 100644
index 000000000..546c6d312
--- /dev/null
+++ b/api/search.index/6063271b6604.js
@@ -0,0 +1 @@
+rn_("FQFDAAAHzRwFnhxiZiMbKh0FAEYAAAW/HHINGzFHAADOGmscbBzOHPMDAmZsOzAAAAEAAAcAAgD6EAAAoxIGACUARQAABWkcYbgWXhdfF3uEsEAZ4AABIYAE")
\ No newline at end of file
diff --git a/api/search.index/6077cea5cde7.js b/api/search.index/6077cea5cde7.js
deleted file mode 100644
index a0787ba0d..000000000
--- a/api/search.index/6077cea5cde7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQBEAAAGzhtythi3GLgYuRi6GLsYvBgjgwKgYAAAGmFjdCUAQQAAA9AYbpQMwxC5FwUBwAAAATMNDZEcZXQFAcAAAAuBGgPrG2F03wGFsAAZqQMcDGAC")
\ No newline at end of file
diff --git a/api/search.index/60e47135379e.js b/api/search.index/60e47135379e.js
deleted file mode 100644
index f9d109270..000000000
--- a/api/search.index/60e47135379e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQBAAAATUhdTF2kjGCQYUhpTGgUAQwAAAFEXc2EcYwIDsBAYogABaW5z8rMYAAArBAUBwAAAB7gcAQ8cYW8FAcQAAALuHAHqHGFvI4UCoAAAAByEZGYFAcQAAAbfHAPQHG90GwKg4AAAHPpobzcBg4egMAAAHDKhgAAAHQ+gQAAAHG+gUAAAHIUsiAMFAEkAAAZxHGKJGhOCArBQGL4AAWZ3SwOggAAAF7ygQAAAHHNhZWkFAEEAAAK9EGWmChsCsEAcXwBFY3QFAcAAABDEDMUMEX8O8RpuchsDoJAAABygsKAayAHzYWVz1wMAhrBgF/IAATApCPNRBAAAAQABAA==")
\ No newline at end of file
diff --git a/api/search.index/61dab3f77ebc.js b/api/search.index/61dab3f77ebc.js
new file mode 100644
index 000000000..0727a9bcb
--- /dev/null
+++ b/api/search.index/61dab3f77ebc.js
@@ -0,0 +1 @@
+rn_("FQFDAAAHzRwFnhxiZiMbKh0FAEYAAAW/HHINGzFHAADOGmscbBzOHPMDAmZsOzAAAAEAAAcAAgD6EAAAoxIGACUARQAABWkcYbgWXhdfF/sDYWZw")
\ No newline at end of file
diff --git a/api/search.index/61e6bc1f412e.js b/api/search.index/61e6bc1f412e.js
deleted file mode 100644
index cd3bde86a..000000000
--- a/api/search.index/61e6bc1f412e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUgAAIAaIhsjG2kcEwICoFAAABx6Z3I7MAAAAQAAGwAJAFwOCABxFgMAjxcBAKUZAADAGQAAqxoBALQaBQAuGwEAYhwAAA==")
\ No newline at end of file
diff --git a/api/search.index/620927b3c27d.js b/api/search.index/620927b3c27d.js
new file mode 100644
index 000000000..d1454c02e
--- /dev/null
+++ b/api/search.index/620927b3c27d.js
@@ -0,0 +1 @@
+rn_("BQHAAAADDBsAHRhhcwUBwwAAF9gc2RwSOBw5HGRzUwADoFAAABtqZm1u8rcWAACmADFAAABpCnoOew7IF/sCeXplAEQAAAZQHWTvGfAZ2RraGusc7Bw7HfMFAWPywhYAAAEAGwKgIAAAFldlbwUBwAAAA98ZALYWYXMFAcAAAASoGlDXF9gX2RfaF9sX3BdpcwUBwwAAF6YcpxwSaBtpG2RzBQBEAAADXxt3pxUFAcAAAAN5E0AkDSUNJg0nDSgNYWX7AnJ0twcAiKAAAAAQ1rCQHRAAECE4DTswAAABAAATAAYABwMEAPkQAAB/EgQAQRcGAIUcAAA5HQAA")
\ No newline at end of file
diff --git a/api/search.index/6226c6ed1211.js b/api/search.index/6226c6ed1211.js
deleted file mode 100644
index 3316da722..000000000
--- a/api/search.index/6226c6ed1211.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUAAAHMXdBeqF6sXBQFDAAAGvhwCXRxictYbI4cCoEAAABwWZnMbAqBwAAAYX2FyBQBEAAAA+RpzlBq3AADGoIAAABhgoDAAABCooGAAAByeAAigCzowAAABAAAAAAAKABAAAACyCLMIARcmF2sXbBfhF/QXXhqDGh4b")
\ No newline at end of file
diff --git a/api/search.index/623a4bd7b434.js b/api/search.index/623a4bd7b434.js
deleted file mode 100644
index b2980a8ff..000000000
--- a/api/search.index/623a4bd7b434.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAADjxkFvBptdCsCsHAbtQABYWWHAIOHoNAAABzNoOAAAByqoBAAABcDoQAAABzcoNAAABx7oMAAABxiLJAG")
\ No newline at end of file
diff --git a/api/search.index/624ef353b0e2.js b/api/search.index/624ef353b0e2.js
deleted file mode 100644
index ffb6841d5..000000000
--- a/api/search.index/624ef353b0e2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQFDAAAX7BuaHADvFmZzIRYiFiMWJBYFAEAAAAPEG2q6GyUAQwAAAYEcZXUapRymHPMBAmxz9XEVAABHAtEBAQAEATsDoBAAAA4vYWZ08wABafRdEwAAAQAOBQEAIUoAAK8ZsBn3GvsCY3Q=")
\ No newline at end of file
diff --git a/api/search.index/62db364022b8.js b/api/search.index/62db364022b8.js
deleted file mode 100644
index 1cd0202c4..000000000
--- a/api/search.index/62db364022b8.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBBAAAGCx1k9BwTiAKgQAAAHNJtbwUBQAAABnkcAa4bM3EeHBUARAAAAzQbbNMYMBwxSAAAnRyhHLMcuhwxQgAAxRvTGwccERwFAcAAAAwAHQ3mHGFoDweHoIAAABy8oIAAABzFoVAAAB0IoKAAABzwHgAc84ECcHYrAqAgAAAcgm9yBQHAAAAC5RoUuhdCHGlvBQHBAAAMLBwDiRhtboFGAABhGGIYfxqNGuMa7xoyG8kbNBw3VACMsHAcgwANoDAAABvpoCAAAButsBAZqQMcoEAAABf3oDAAABvqoIAAABxt1qkTOjAAAAEAAAAAABcAEAAAAMcMyAz4DPkM+gz7DPwM/Qz+DP8MAA0BDU4TWhNlFmkWbhZ1F8MXxBfhGHoZexlhGnUARQAABXoccsAZtBq1GrYatxq4GrkaLxv7AmNnBQBDAAAGEx1kCR3zAAFvAU0WAAD7A2xvcg==")
\ No newline at end of file
diff --git a/api/search.index/62f3cb04b651.js b/api/search.index/62f3cb04b651.js
deleted file mode 100644
index c68b5c795..000000000
--- a/api/search.index/62f3cb04b651.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQBCAAAQKxgsGHOIDIoYixglAUAAAAVEFwVFF3J3pwqLDIwMGwKgAAAADLhueAUBwAAACrAbEiYOixxjcvsDZWlz")
\ No newline at end of file
diff --git a/api/search.index/6303061a40a9.js b/api/search.index/6303061a40a9.js
new file mode 100644
index 000000000..b12b0e775
--- /dev/null
+++ b/api/search.index/6303061a40a9.js
@@ -0,0 +1 @@
+rn_("BQBGAAAB6RlpZBsFAcQAAAhnHAekHGJsgUwAAD0cPhw/HEAcQRxCHEMcRBy9HDFEAADuF+8X8BfxFwUBwAAABugZA2cXcnXPAcWhAAAAHN6wYBkKAAEEATACAYECsUAdKAABsPAc8wABZ3MFAcAAAAAPHQYJGWV0BQHDAAAM3RwPER1jZvsDYWVvBQHAAAAHEBsHERtjbROBAqCAAAAbEnd4BQBFAAAHqRxz+xorAqAwAAAZzG10AYUDoEAAABwAoUAAAB1CoIAAABzBY2VsGwKwYBv2AAFudPMAAmFlAUsdAAAJAqEAAAAc3KDAAAAcPGRuBQHAAAATZBdlFwNmF2VsGwKgAAAAFz1pcwECArEwHSYAAaBwAAAbbmZsAcgYAAAbA6DQAAAc7aAQAAAQyGFlbwUBwAAADJIcA+0XY3QrAqCwAAAdEG1uBQLAAAAFkhgK/xsG5hlwc3RbA7BAF2IAAWFsbwEA0aBAAAA [...]
\ No newline at end of file
diff --git a/api/search.index/6311babd195d.js b/api/search.index/6311babd195d.js
deleted file mode 100644
index 83f1a76c4..000000000
--- a/api/search.index/6311babd195d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("VQBBAAATURNSE2alCjAWMRYyFjMWNBYFAcEAAAPGGFbUF9UX1hfXF8AYwRhqcDFCAADHGMgY7hvvGyFIAAA2HDccfBw1AEIAAAGNHGk8HKMcrhzYHDsDoKAAABzBcHR1I4QDoBAAABqwoDAAABw9aXN084ECaW4rA7BgGZAAAaAQAAAYH2dydPsDYXJ1")
\ No newline at end of file
diff --git a/api/search.index/6321c0d15fcd.js b/api/search.index/6321c0d15fcd.js
deleted file mode 100644
index 2da6c56a1..000000000
--- a/api/search.index/6321c0d15fcd.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBEAAADNBts0xgwHDFIAACdHKEcsxy6HDFCAADFG9MbBxwRHAUBwAAADAAdDeYcYWgPB4eggAAAHLyggAAAHMWhUAAAHQigoAAAHPAeABzzgQJwdgUASAAABp4cdh4bWwOgIAAAHIJsb3I=")
\ No newline at end of file
diff --git a/api/search.index/63433050a8a9.js b/api/search.index/63433050a8a9.js
deleted file mode 100644
index ce802c197..000000000
--- a/api/search.index/63433050a8a9.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBGAAABrBlpJRsFAcQAAAgmHAdiHGJsgUwAAPwb/Rv+G/8bABwBHAIcAxx7HDFEAAC0F7UXthe3FwUBwAAABqsZAy0XcnXrhLBgGM4AAQTABAGBArFAHOQAAbDwHLAAAWdzBQHAAAAAzBwGzRhldAUBwwAADJscD84cY2b7A2FlbwUBwAAAB9EaB9IaY20TgQKggAAAGtN3eAUARQAAB2ccc7waKwKgMAAAGY9tdAGFA6BAAAAbv6FAAAAc/qCAAAAcf2NlbBsCsGAbtQABbnTzAAJhZQEHHQAACQKhAAAAHJqgwAAAG/tkbgUBwAAAEyoXKxcDLBdlbBsCoAAAABcDaXMBAgKxMBziAAGgcAAAGy9mbAGMGAAAGwOg0AAAHKqgEAAAEJ5hZW8FAcAAAAxRHAOzF2N0KwKgsAAAHM1tbgUCwAAABVYYCr4bBqkZcHN0WwOwQBcoAAFhbG8BANGgQAAAFliwgBmnAAF [...]
\ No newline at end of file
diff --git a/api/search.index/63b761160711.js b/api/search.index/63b761160711.js
new file mode 100644
index 000000000..aac589c78
--- /dev/null
+++ b/api/search.index/63b761160711.js
@@ -0,0 +1 @@
+rn_("BQFAAAAGuxwB7xszcV8cFQBEAAADcxtsDxlxHDFIAADgHOQc9hz9HDFCAAAGHBQcSBxSHAUBwAAADEQdDSodYWgPB4eggAAAHP+ggAAAHQihUAAAHUygoAAAHTQeABzzgQJwdisCoCAAABzEb3IFAcAAAAIkGxT0F4McaW8FAcAAAAvAGgMsHGF0GwKwABnmAyJjZAUBwQAADG0cA8UYbW6BRgAAnRieGL4azBoiGy4bcRsKHHUcN1YAjLBwHMUADaAwAAAcKqAgAAAb7qBAAAAYMaAwAAAcK6CAAAAcr9apEzowAAABAAAAAAAZABAAAADoDOkMGQ0aDRsNHA0dDR4NHw0gDSENIg2AE4wTnRahFqYWrRavF/0X/he5GB0Ztxm4GaAa")
\ No newline at end of file
diff --git a/api/search.index/63be059bdab2.js b/api/search.index/63be059bdab2.js
new file mode 100644
index 000000000..02c8206fc
--- /dev/null
+++ b/api/search.index/63be059bdab2.js
@@ -0,0 +1 @@
+rn_("FQFBAAAF5xkQkRaSFmVzcBNxEwUBwQAABHwcDCAdaW/7AmVvFQBCAAAGtBx22hzbHCOCA6BAAAAchrAAHRkAAWluc/sCYXI=")
\ No newline at end of file
diff --git a/api/search.index/63c9a88dae3c.js b/api/search.index/63c9a88dae3c.js
new file mode 100644
index 000000000..4c63e5cc7
--- /dev/null
+++ b/api/search.index/63c9a88dae3c.js
@@ -0,0 +1 @@
+rn_("BQBBAABEmxecF50XnhefF3LcCBUAQwAAIMEXChsLG3MOGg8aFQFAAAAEexwLXxxibaIOow5rhLBAEdEGQ6AgAAAWUwwQAjsDoMAAABzQZXN0")
\ No newline at end of file
diff --git a/api/search.index/63d0ed3f3447.js b/api/search.index/63d0ed3f3447.js
deleted file mode 100644
index 12bfdf9ee..000000000
--- a/api/search.index/63d0ed3f3447.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAFgxYZXRheGGVpBQBLAAAA+RpzlBoFA8AAAFSgEKEQohCjEGITYxMmWxZcFk4XJzAXMReAGBLCDMMMY25vcBUARAAAANwbc0MbRBsTiAKgMAAAGvhmcwUARwAAAOoXc00XIUsAAK8ZsBn3GgUBwAAAAu8cAescYW/zAwFw8ukYAAB2ASODAqAAAAAchmRmFQBEAAAMoxxwEh0THQUAQwAAFNYZ1xljZBMFAEQAAASVGmN/GTMAA6CQAAAalmZyc/KqCAAApgr/AIWgoAAAGpMoKCABgQKhEAAAHKOgcAAAGOlmbBUARgAACJMcc/Ub9hvXfADLoMAAABr2sDAOQAABoQAAABwXQE8kDQF3AQAA")
\ No newline at end of file
diff --git a/api/search.index/640b5885e6b9.js b/api/search.index/640b5885e6b9.js
new file mode 100644
index 000000000..c335b7928
--- /dev/null
+++ b/api/search.index/640b5885e6b9.js
@@ -0,0 +1 @@
+rn_("QUIAAIQXFxgYGFQb7RtlAEMAAAYZG3KRF5IXkxeUF5UXlheXFxsCoPAAABzOYXIFAEMAAAS6HHUVGfMEAW/ynhYAAAMBZQBIAAAGbhxyIBohGiIaIxokGiUaJhrHAQCFoKAAABtyoMAAABt1GCAF8nsMAABRC/sCZWk=")
\ No newline at end of file
diff --git a/api/search.index/6492e05a37ef.js b/api/search.index/6492e05a37ef.js
deleted file mode 100644
index 1f748ec59..000000000
--- a/api/search.index/6492e05a37ef.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("tQBCAAADDxd0qAqpCqoKqwqsCq0KrgqvCtsYdBx6HH0cBQBFAAAGChxiahghRAAAVBZVFh8bBQHBAAACaxgCaRhidPMAAXT1tBAAAAsBAQAqBqcEBQHAAABCBBgFGAYYBxgIGDdLG0wbTRtOG2V1BQBDAAAY1RzWHHe3G0UBQgAAJLEbsht/HAXoGmN3PxdAFx0YHhghGysCoEAAABmLZWkFAsEAABRLGkwaET4XwBsUSRp+GmVseAUBQwAAD/4cEr0ZvhljcsIXBQBEAAACbhhyaxbzAAFmAboRAAD7AmRuAYIDoVAAAB0IoCAAABwRoIAAABy6ZHV3KwKgIAAAHIJvckMEA6BgAAAa77BwHIMADWJlcAFuFgAAIUIAAKQYpRi/G/sCY3QbAqCQAAAbOWFvBQHAAAA1yBnJGccazxoBdhppdQUBwAAAA80aAOMXYXMFAcMAABeWHJccEvcb+Btkc1MBA6BQAAAbK2Z [...]
\ No newline at end of file
diff --git a/api/search.index/649cc9d2f06a.js b/api/search.index/649cc9d2f06a.js
deleted file mode 100644
index 2e2b75187..000000000
--- a/api/search.index/649cc9d2f06a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAADzRoA4xdhcwUBwwAAF5YclxwS9xv4G2RzUwADoFAAABsrZm1u8n8WAACkADUAQAAAAdUMcFEKVg5XDo4XdQFCAAABqRoE5Rtpc5gYmRivGbAZ9xo8Gz0bIxwFAEIAAAIDHW34HCOHAqCAAAAdB2FrBQHAAAAAdA4J/Rxsd3MChKAAAAAa1wUEAvKkCgAAphEVAEIAAAc/HG01FwwYI4ECoDAAABl9YmtlAEMAAAgAHWJzFXQVdRV2FXcVeBV5Fb8DhqDQAAAc5pEBwA==")
\ No newline at end of file
diff --git a/api/search.index/64c2ad619c6a.js b/api/search.index/64c2ad619c6a.js
new file mode 100644
index 000000000..d40cd9807
--- /dev/null
+++ b/api/search.index/64c2ad619c6a.js
@@ -0,0 +1 @@
+rn_("FQBDAAAEHxxmIx0kHXUAQAAAFJMclBxtmg5jGGQYZRiTGJQYXBxdHBsCoBAAAA5bZG4FAEUAAARVHGUMGhsCoCAAABqkdXk3AAGFoBAAABtmsCAXgAABoEAAABqlAkEDOjAAAAEAAAAAABAAEAAAAOEQ9hBtFoYWhxZoF2oXaxe8GAgZ0RlHG2UbfRt+G40c+hwxRAAAthe3F7gXuRcFAcAAAC8OHR4dHx0nDhyHHIgcYXIjBAOgEAAAHCCwUBxqAGJlcHMBpRYAAPMAhBYBAPJtAQAAGhI=")
\ No newline at end of file
diff --git a/api/search.index/64c6f89ae541.js b/api/search.index/64c6f89ae541.js
deleted file mode 100644
index 0250fd78f..000000000
--- a/api/search.index/64c6f89ae541.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQFDAAAHixwFXBxiZuQa5hwFAEYAAAV9HHLOGjFHAACPGiocKxyMHPMDAmZsOzAAAAEAAAcAAgDQEAAAcxIGACUARQAABSgcYYAWJBclF3uEsEAZowABIYAE")
\ No newline at end of file
diff --git a/api/search.index/6513f868ef5c.js b/api/search.index/6513f868ef5c.js
deleted file mode 100644
index 7831d0cd9..000000000
--- a/api/search.index/6513f868ef5c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQBEAAAGzhtythi3GLgYuRi6GLsYvBgjgwKgYAAAGmFjdCUAQQAAA9AYbpQMwxC5F/sCb3MFAcUAAAVgGhF8GmgcZW9rhLAgDIYAAaCgAAAckREBAQ==")
\ No newline at end of file
diff --git a/api/search.index/65616b5a1e73.js b/api/search.index/65616b5a1e73.js
deleted file mode 100644
index de529d287..000000000
--- a/api/search.index/65616b5a1e73.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQYAOzAAAAEAAB4AAQAzGB4ABQBBAAAGCx1k9BwTggKgQAAAHNJtbwEAAaBgAAAdDWQ6MAAAAQAAAAAAFAAQAAAAtAi1CIcOsBHLGOAZTRoNGw4bDxsQGxEbEhsTGxgcGRw6HI8cmxzPHPwcSwOwIAzGADGgUAAAGX5icnN7hKDwAAAcKBBBAQ==")
\ No newline at end of file
diff --git a/api/search.index/659c2345da66.js b/api/search.index/659c2345da66.js
new file mode 100644
index 000000000..1b100307a
--- /dev/null
+++ b/api/search.index/659c2345da66.js
@@ -0,0 +1 @@
+rn_("VQBFAAAIqxxnqRaqFqsWrBbJF8oXGwKgAAAAFq1jZ0UBQgAAJPIb8xvBHAUnG2N3eRd6F1kYWhhgG2sDoEAAABnIZWlv")
\ No newline at end of file
diff --git a/api/search.index/65ac463e5577.js b/api/search.index/65ac463e5577.js
deleted file mode 100644
index 765b014dc..000000000
--- a/api/search.index/65ac463e5577.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHBAAAFDBsG5xtmbjUAQAAABIcccMMaxBrsG5ocBQHAAAAHuRwBEBxhbwUBxAAAAu8cAescYW8jhQKgAAAAHIZkZgUBxAAABuAcA9Ecb3QbAqDgAAAc+2hvZzQAiqBQAAAaRqAwAAAcM6GAAAAdELBAHGsAAaBAAAAccC6YBzowAAABAAAAAAAJABAAAABJDkoOSw5LGkwaVBrbGyAcQxzDHA==")
\ No newline at end of file
diff --git a/api/search.index/65f281c187c3.js b/api/search.index/65f281c187c3.js
deleted file mode 100644
index 4d55997bb..000000000
--- a/api/search.index/65f281c187c3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAA11RtOHLQctRwMvRxhafMEAWb04hcAAOQD2QAnADFGAADiGGcaaBpmHPOBAnB2FQBBAAAEHRxm6hzrHLUAQgAABD4cZqYRpxGoEakRjxiQGKEaohqjGqQa7hzvHPsDYW9y")
\ No newline at end of file
diff --git a/api/search.index/6629c438367a.js b/api/search.index/6629c438367a.js
deleted file mode 100644
index 200621ea3..000000000
--- a/api/search.index/6629c438367a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQFIAAAHixwFXBxiZuQa5hwxSgAAABsBGwIbAxsFAcIAAFLrF+wX7RfuF+8X8BdU6hjrGOwY7RjuGO8Ya3ZRSgAA+hr7Gvwa/Rr+Gv8a44GEsEAWhAABIBgC+wJldA==")
\ No newline at end of file
diff --git a/api/search.index/66829fceeb1d.js b/api/search.index/66829fceeb1d.js
new file mode 100644
index 000000000..74dadaa95
--- /dev/null
+++ b/api/search.index/66829fceeb1d.js
@@ -0,0 +1 @@
+rn_("BQLGAAABDB0GLR0IOR1pc3QjhgKgQAAAHJljbgUATwAABk8dZDgdBQBJAAAGNx1k+RwFAEwAAAZKHWQsHQUATAAABkkdZCsd+wJhafOEA21udPsCb3U=")
\ No newline at end of file
diff --git a/api/search.index/66b44ce5813b.js b/api/search.index/66b44ce5813b.js
deleted file mode 100644
index 70d1fa0a2..000000000
--- a/api/search.index/66b44ce5813b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAFJBwOjhwYUxtVHGVpbUUAQwAAAwscac4QURZSFlMWghoFAcMAAArwHA0AHWV0IwQCoGAAABw0YnAB4RgAABUAQAAABtMZYs0QuxnzgQJudBMAA6BgAAAcwqBwAAAa5mNucjswAAABAAAHAAIA+hYGAHkcAAAFAcAAAAQ1GwLbGHB1BQHBAAAy2RraGu4azhsW0RnSGWVpY4EDoOAAAByKY3FzBQHAAAA11RtOHLQctRwMvRxhafMEAWb04hcAAOQD2QAnADFGAADiGGcaaBpmHPOCAnB2BQHEAAAR1BtNHAV0HGVyEwcCoCAAABnQYnLz3xcAAAEA6QAFAcAAABnkG1scZJQXlReWF5cXmBeZF5oXY3hVAEAAAAYSHWSwHLEc3RzkHOUcBB0hRgAA3RfeF6wbBQHAAAATeRZ6FjdRG1IbNRxUHG1uawOgMAAAGAphb3IFAcEAABYmHAAdBEkXY2kBANCgwAA [...]
\ No newline at end of file
diff --git a/api/search.index/66cb1f9c1633.js b/api/search.index/66cb1f9c1633.js
deleted file mode 100644
index 5b2ec527a..000000000
--- a/api/search.index/66cb1f9c1633.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBEAAAGDh1kwRz/HEMAA6CAAAAcc7CQGOUAzGNlbDowAAABAAAAAAAQABAAAADWCNcIiwqMCo0KjgqLC4wL3AxSDVMNVA1YDrgRNxdkGukc")
\ No newline at end of file
diff --git a/api/search.index/67279099c258.js b/api/search.index/67279099c258.js
deleted file mode 100644
index 4f5aa8fc4..000000000
--- a/api/search.index/67279099c258.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBIAAAEXhxl8xr0GiOCA7BgGYACe6BAAAAYZ2RpcvMAAWk7MAAAAQAARwEEABUGwwDeBwAAuxcAAPIYgQAFAcAAABffGhkbA9saZXAVAEsAAAReHGXzGvQa8wEBaTswAAABAACCAAIAuxcAAPIYgQAVAEAAAAXqGnd6F3sX+wJnaQUARQAABgocYmoYBQHBAAACaxgCaRhidPMAAXT0tBAAAAsBAQAqBkUBQgAAJLEbsht/HAXoGmN3PxdAFx0YHhghGysCoEAAABmLZWkFAUQAAA/+HBK9Gb4ZY3LCFwUBwAAAI6QYpRi/Gwk5G2FvtwwDiLAwFz4EgqBwAAAZv6AwAAAYHzSYEvU0DgAAAQAwAOgIzwC1AUAAABTHHMgcAAEdbXNWFlcW5RfmF6IYoximGawZsBoHG0scpxz7hShgBA==")
\ No newline at end of file
diff --git a/api/search.index/675afd52bcb0.js b/api/search.index/675afd52bcb0.js
new file mode 100644
index 000000000..95f5f2acc
--- /dev/null
+++ b/api/search.index/675afd52bcb0.js
@@ -0,0 +1 @@
+rn_("BQHAAAA1FhyPHPcc+BwMAB1hafMAAWb2HBgAAF0DjgCQAEsAJwDzAwFyASgbAAAFAcEAAAQlHQUwHXFz8wYBcjowAAABAAAAAAAJABAAAAAeGQEaAhoDGgQaphqnGgQbBRuoHPsCcHYVAEgAACDSGdMZgRtzNBtWHFFCAAA5GDoYOxg8GD0YPhj7AmZz+wJlbyUAQAAABF4cZlAcLh0vHSsCoBAAABq2cnMFAFEAAAZXHWRNHRMDAqCAAAAbZWRzAfkMAADFAEEAAAR/HGbSEdMR1BHVEcsYzBj2GeAa4RriGuMaMh0zHQUASgAABlIdZEMdIUgAAMocyxwCHSFDAAAQHBEciRz7A3B0dSMEAqBgAAAcwG1zAfscAAATgQKwIBrxAAFpbvsCcnT3AACFoAAAAAqGAUgD8kYEAAAdGA==")
\ No newline at end of file
diff --git a/api/search.index/676d92b10ba9.js b/api/search.index/676d92b10ba9.js
new file mode 100644
index 000000000..c51f8aae5
--- /dev/null
+++ b/api/search.index/676d92b10ba9.js
@@ -0,0 +1 @@
+rn_("BQHFAAAB4xwEdRtpdNFDAADOF88X0BfRF9IX0xfUF5QalRqWGpcamBqZGpoa+wJpdDFDAACFE4YTIBnPGgUBwAAACXYbFLka7BplcCFCAAB7G3wbZBwFAEIAAAJHHW08HSOHAqCAAAAdS2FrYwcDoKAAAB1BYWNrAYscAAA7A6BAAAAZsWNkdEcDAIawkBwlAHigUAAAGvCgAAAAHGMEqCEBDx0AAA==")
\ No newline at end of file
diff --git a/api/search.index/67f3d7b37484.js b/api/search.index/67f3d7b37484.js
new file mode 100644
index 000000000..995aaec0d
--- /dev/null
+++ b/api/search.index/67f3d7b37484.js
@@ -0,0 +1 @@
+rn_("BQHBAAAAWA0G+BdlaTUAQQAAARsbdg4chxyIHLUcJQFBAAAW8xz0HBXfGmgcZXPREXMWFBgrA7AAFnICMKBwAAAb8WRvdgEAAqDQAAAc8KEwAAAdImFwAZETAAAbAqAwAAAXyGRtBQBGAAAQeRuXHHIoG/MDAXABpBYAABsCoEAAABjvYW8FAEMAAAZXHWRNHfMCAW8BhRYAAHcDAIewcBsCAAGgwAAAHIY1QRA6MAAAAQAAAAAACgAQAAAAsQrMDFQNYQ1iDWMNbA1tDeYXAhn3GSUAQAAAAzQcaRAcERyJHDUAQAAAOAgbCRsTHEYcYTIY0RoTG00cBQBGAAAA+xtzzRoFAcEAAADMFyIXGBgY7RtlabOBhIAZ/gASoCkABFFDAADnF+gXmxqcGvwa/RoxRAAAthe3F7gXuRcFAcAAAC8OHR4dHx0nDhyHHIgcYXIjBAOgEAAAHCCwUBxqAGJlcHMBpRYAAPOBAmJ [...]
\ No newline at end of file
diff --git a/api/search.index/68874c1bcf58.js b/api/search.index/68874c1bcf58.js
deleted file mode 100644
index 8b2b888e7..000000000
--- a/api/search.index/68874c1bcf58.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQFAAAAGeRwBrhszcR4cFQBEAAADNBts0xgwHDFIAACdHKEcsxy6HDFCAADFG9MbBxwRHAUBwAAADAAdDeYcYWgPB4eggAAAHLyggAAAHMWhUAAAHQigoAAAHPAeABzzgQJwdisCoCAAAByCb3IFAcAAAALlGhS6F0IcaW8FAcAAAAuBGgPrG2F0GwKwABmpAxxjZAUBwQAADCwcA4kYbW6BRgAAYRhiGH8ajRrjGu8aMhvJGzQcN1YAjLBwHIMADaAwAAAb6aAgAAAbraBAAAAX96AwAAAb6qCAAAAcbdapEzowAAABAAAAAAAZABAAAADHDMgM+Az5DPoM+wz8DP0M/gz/DAANAQ1OE1oTZRZpFm4WdRZ1F8MXxBd9GOEYehl7GWEa")
\ No newline at end of file
diff --git a/api/search.index/68f69022418e.js b/api/search.index/68f69022418e.js
new file mode 100644
index 000000000..8f0d72bb6
--- /dev/null
+++ b/api/search.index/68f69022418e.js
@@ -0,0 +1 @@
+rn_("AQIBoDAAABhuajswAAABAADGAAIAAA0AAAEQxQABAAGAF5gAEAFzOjAAAAEAAAAAABIAEAAAAJ4MnwwiFyMXwxfEFyEYIhgjGJAY/xi6GQcapBqyGsQa6BozHEEd+wJkbg==")
\ No newline at end of file
diff --git a/api/search.index/6935085caaf6.js b/api/search.index/6935085caaf6.js
deleted file mode 100644
index 76b5a9c5a..000000000
--- a/api/search.index/6935085caaf6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBRAAAGEh1kBB0hRAAA1xi9Gx8cUwQDoMAAABzdZWZ3AR0bAAAlAEUAAAYGHGJkGOwZ7RkFAcAAAAeTHAWAHGZ0BQHAAAAUYxjrGQbZHG9yBQBGAAAEwxtl1hhXBQGHsPAc4gABsDAYjwABoFAAABzAJoAWOjAAAAEAAAAAAAcAEAAAACgO2xDcEN0QIBgUG/Ub9hsVAEIAAAEgHGmvGhgb+wJlbFsDoIAAAByvaXJ1")
\ No newline at end of file
diff --git a/api/search.index/69367ceba54e.js b/api/search.index/69367ceba54e.js
deleted file mode 100644
index 8b255720c..000000000
--- a/api/search.index/69367ceba54e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AYMCoNAAABzNoQAAABzcY3AFAEgAAAfCHHMsG/MBAmZ381YNAAABAAEAJQBCAAAO1BxjDxgQGEYaW4SgoAAAGNKgIAAAG7AVQAA=")
\ No newline at end of file
diff --git a/api/search.index/6940fe1b0fe0.js b/api/search.index/6940fe1b0fe0.js
deleted file mode 100644
index 49bd25320..000000000
--- a/api/search.index/6940fe1b0fe0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBCAAADexphCxxlAEAAAAa/F2KaCpsKNw04DTkNOg07DQEAADswAAABAACBAAEA7hSBACsCoEAAABfLZW+RRAAADRsOGw8bEBsRGxIbExsYHBkcjxxbA6CAAAAc1GJzdDFCAABdE14TbBhtGPMAAWU7MAAAAQAAxwADALoKAABZDcMASxICAPuECGAE")
\ No newline at end of file
diff --git a/api/search.index/696d69b9c241.js b/api/search.index/696d69b9c241.js
new file mode 100644
index 000000000..64ae64a63
--- /dev/null
+++ b/api/search.index/696d69b9c241.js
@@ -0,0 +1 @@
+rn_("NQBCAAAWSR1KHWS3HLgcKx0sHQUBwQAAAY4XAjMYYXUrA6BQAAAWn6BAAAAWmWJzdrUBQAAAFAIcAxwAgxZtc14ODxIQEhESEhITEhQSChkLGbca5BrlGt8AxaAgAAAbKqCQAAAYAQACCgo=")
\ No newline at end of file
diff --git a/api/search.index/6986cf071586.js b/api/search.index/6986cf071586.js
new file mode 100644
index 000000000..546d427fc
--- /dev/null
+++ b/api/search.index/6986cf071586.js
@@ -0,0 +1 @@
+rn_("BQBAAAADBRxq+xslAEMAABHDHN4cZbQa6BzpHBUARwAABKAcZTIbMxsrAqAQAAAbWmR6YUIAAEEXQhdDF0QXRRdGF0cXlwkAiLBgGb0Cf6AQAAAQ5aAgAAATh6BAAAAYoxxJA/WoFQAASgLUAQEABgE=")
\ No newline at end of file
diff --git a/api/search.index/6a45f9eb3342.js b/api/search.index/6a45f9eb3342.js
deleted file mode 100644
index 9f7d8e011..000000000
--- a/api/search.index/6a45f9eb3342.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUMAAFUXVhfVGDkbBQFBAAAP/hwSvRm+GWNywhchQgAA3RGLGowaVwEAhbBQGIoAAbCgHBgAAQBBB/UIDQAAAQABAAEAPw0=")
\ No newline at end of file
diff --git a/api/search.index/6a61a843fa86.js b/api/search.index/6a61a843fa86.js
deleted file mode 100644
index d473b7f0b..000000000
--- a/api/search.index/6a61a843fa86.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("gUIAADMOXBMPF1UXVhfKGNUYeRo5GxUBRwAAB4scBVwcYmbkGuYcBQBBAAAGCx1k9BwTiwKgQAAAHNJtbysCoGAAABxfbHQFAsAAADTgG+Eb4hvjGzCvEMsc2hzbHAhJGm5yc2UAQAAAB+YacvoW+xb8Fv0W/hb/FgAXBQHBAAAE2RoFNRtxc/ODAnJzvwOGoHAAABz1EUFB")
\ No newline at end of file
diff --git a/api/search.index/6abde7f23c3b.js b/api/search.index/6abde7f23c3b.js
deleted file mode 100644
index 1c5af39a5..000000000
--- a/api/search.index/6abde7f23c3b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUoAAOAb4RviG+MbFQBFAAARBxtLHGl5GbkbGwKwkBwSAAFlaQUCRgAAEU8byRwG6RwI9Rxpc3TqGRUAQQAAFMEbwhttpRqmGhMEAqAgAAAbBmly940YAAABAD4BAQApATIALwH7AmNuMUUAAHUZdhl3GXgZBQHDAAAzoRqiGqMapBoFdhpwc/vFAAiAGQUAQQAANFEc4hzjHP4cbM4c+wJjdA==")
\ No newline at end of file
diff --git a/api/search.index/6b5c325ae0f9.js b/api/search.index/6b5c325ae0f9.js
new file mode 100644
index 000000000..06c72dd8e
--- /dev/null
+++ b/api/search.index/6b5c325ae0f9.js
@@ -0,0 +1 @@
+rn_("IUMAANQajxsnHAUBwwAACjQdDUQdZXQjBAKgYAAAHHVicAEdGQAABQFDAAAJcBwVIBshG2RzdBcjAAKgYAAAGhBidPL3EAAAAQn7Am50WwOgUAAAHN1hZW8=")
\ No newline at end of file
diff --git a/api/search.index/6bd327ddb5ac.js b/api/search.index/6bd327ddb5ac.js
new file mode 100644
index 000000000..b6f2e3368
--- /dev/null
+++ b/api/search.index/6bd327ddb5ac.js
@@ -0,0 +1 @@
+rn_("AQADoEAAABhHsGAcLwABgBfBNJABZnBzOzAAAAEAABAABgCsFwAAyRkAAA4aAQDwGgAAORsFAIQbBQAbAqAAAAAOcHR2")
\ No newline at end of file
diff --git a/api/search.index/6bedc467937e.js b/api/search.index/6bedc467937e.js
new file mode 100644
index 000000000..38f2994f3
--- /dev/null
+++ b/api/search.index/6bedc467937e.js
@@ -0,0 +1 @@
+rn_("VQBCAAADTBxp+BDWEYkWihaLFsEaFQBFAAAF3xxjgRyCHFUAQAAAVD8YQBhBGEIYQxhEGHTwDFMNFBkaGRsaHBpRRQAAORg6GDsYPBg9GD4YBQBFAAAGGx1irBwVAEEAAAReHGYuHS8dFQBCAAAEfxxmMh0zHfsCYW8hRQAA8xlIG0kb8wMDbHB38yUZAAB5AdIBBQBCAAAEjxtj7RojgQKgIAAAGEVlbCMAA6DwAAAdOqCAAAAbSmVmcvPvDAAA1w8CAPMAhSiAEjswAAABAAAHAAIArgoAAHwMBgCbhKCgAAAbG6BAAAAdAxBBQA==")
\ No newline at end of file
diff --git a/api/search.index/6c815dd69d03.js b/api/search.index/6c815dd69d03.js
deleted file mode 100644
index d81c94a3a..000000000
--- a/api/search.index/6c815dd69d03.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBEAAAGyhtmxRcrA6AQAAAWH7AgE0AAAWVvcgUAQQAABgodZPEcSwOwYBghAAGgIAAAG+VjdHpPAYWwQBqSAXqwQBZdAAGgsAAAHFkwIQQ=")
\ No newline at end of file
diff --git a/api/search.index/6c9d993e1705.js b/api/search.index/6c9d993e1705.js
new file mode 100644
index 000000000..291b57b54
--- /dev/null
+++ b/api/search.index/6c9d993e1705.js
@@ -0,0 +1 @@
+rn_("UUMAAHUTdhN3E3gTvha/FgUBwAAADOUcCHkcZW4FAEoAABQKHQsdbeocFQBGAAAUrRyuHG2EHAYd84EDZnBzq4SgMAAAGDGgIAAAHUURAQg=")
\ No newline at end of file
diff --git a/api/search.index/6ca6c7c1afe9.js b/api/search.index/6ca6c7c1afe9.js
new file mode 100644
index 000000000..fd95e44d1
--- /dev/null
+++ b/api/search.index/6ca6c7c1afe9.js
@@ -0,0 +1 @@
+rn_("BQHAAAADDBsAHRhhcwUBwwAAF9gc2RwSOBw5HGRzUwEDoFAAABtqZm1u8rcWAACmAAUBwAAAA98ZALYWYXMFAcAAAASoGlDXF9gX2RfaF9sX3BdpcwUBwwAAF6YcpxwSaBtpG2Rz8wCEIDAEOjAAAAEAAAAAAAcAEAAAAPkQfxKAEoESghKDEoUcOR0=")
\ No newline at end of file
diff --git a/api/search.index/6cd04fe3cf84.js b/api/search.index/6cd04fe3cf84.js
deleted file mode 100644
index 02d61467a..000000000
--- a/api/search.index/6cd04fe3cf84.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("9QBAAAAFNxd1mQpuDG8McAxxDHIMcwx0DHUMdgx3DCoXKxf5Ggwb3BsxQwAA2hjnGsgbLhwFAcEAAAUMGwbnG2ZuNQBAAAAEhxxwwxrEGuwbmhwFAcAAAAe5HAEQHGFvBQHEAAAC7xwB6xxhbyOFAqAAAAAchmRmBQHEAAAG4BwD0RxvdBsCoOAAABz7aG9nNAGKoFAAABpGoDAAABwzoYAAAB0QsEAcawABoEAAABxwLpgHOjAAAAEAAAAAAAkAEAAAAEkOSg5LDksaTBpUGtsbIBxDHMMcFQBDAAAO1BxjDxgQGEOBA6BAAAAYmrAQFugAAWFpblcJAImgQAAAHF6ggAAAGGWwYBgRAAGwIA4tCkGgMAAAFh0SsQc6MAAAAQAAAAAALAAQAAAAxwhXClgKWQrLEL0R0REeFmgWaxaEFoUWAhcnF08XUBeIFwkYCxgqGHEYkxmrGZQamBqvGvMa9BoAGwEbAhsDGxg [...]
\ No newline at end of file
diff --git a/api/search.index/6d08f8e53ca9.js b/api/search.index/6d08f8e53ca9.js
new file mode 100644
index 000000000..0e95028c6
--- /dev/null
+++ b/api/search.index/6d08f8e53ca9.js
@@ -0,0 +1 @@
+rn_("MUoAACEcIhwjHCQcFQBFAAARRhuMHGm2GfobGwKwkBxTAAFlaQUCRgAAEY4bDB0GLR0IOR1pc3QnGhUAQQAAFAIcAxxt5BrlGhMEAqAgAAAbRWly98kYAAABAD8BAQArATIAMgH7AmNuMUUAALIZsxm0GbUZBQHDAAAz4BrhGuIa4xoFtRpwc/vFAAiAGQUAQQAANJIcJh0nHUIdbBEd+wJjdA==")
\ No newline at end of file
diff --git a/api/search.index/6d6ddac806b1.js b/api/search.index/6d6ddac806b1.js
deleted file mode 100644
index e1464eb66..000000000
--- a/api/search.index/6d6ddac806b1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQFAAAAGeRwBrhszcR4cBQHAAAAC5RoUuhdCHGlvBQHBAAAMLBwDiRhtboFGAABhGGIYfxqNGuMa7xoyG8kbNBw3RACMsHAcgwANoDAAABvpoCAAAButsBAZqQMcoEAAABf3IVf8R+5CoDAAABvqoIAAABxt1qkTOjAAAAEAAAAAABcAEAAAAMcMyAz4DPkM+gz7DPwM/Qz+DP8MAA0BDU4TWhNlFmkWbhZ1F8MXxBfhGHoZexlhGnUARQAABXoccsAZtBq1GrYatxq4GrkaLxs7A6AQAAATVWNncg==")
\ No newline at end of file
diff --git a/api/search.index/6f0da4bd2aef.js b/api/search.index/6f0da4bd2aef.js
deleted file mode 100644
index f2a4d56f7..000000000
--- a/api/search.index/6f0da4bd2aef.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAACL/Bv9G/4b/xsAHAEcAhwDHHscEykcihwI0RtvcnkxRAAAtBe1F7YXtxcFAcAAAAarGQMtF3J1DweHsGAYzgABoBAAABNNsCAZpwABoGAAABu4FOEE")
\ No newline at end of file
diff --git a/api/search.index/6f607a0b3e48.js b/api/search.index/6f607a0b3e48.js
deleted file mode 100644
index 80ea2d176..000000000
--- a/api/search.index/6f607a0b3e48.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHDAAAA2RAhbhyrHKwcZW9hQQAABxcIFwkXChcLFwwXDRcFAsMAAAi8HALTGwihHGJ1dyMFAqBgAAAajWJwAVoTAAD7A2FtdQ==")
\ No newline at end of file
diff --git a/api/search.index/6f8eb60fcb1f.js b/api/search.index/6f8eb60fcb1f.js
new file mode 100644
index 000000000..3e6a87544
--- /dev/null
+++ b/api/search.index/6f8eb60fcb1f.js
@@ -0,0 +1 @@
+rn_("MUoAAIobixuMG40bFQBAAAAUYhy6HHV3FxUZBQHCAABSvhi/GMAYwRjCGMMYVBUaFhoXGhgaGRoaGmt2UUoAAIQbhRuGG4cbiBuJG+8BxbBAF4kAAQAIRgE=")
\ No newline at end of file
diff --git a/api/search.index/6fa94fb13a3e.js b/api/search.index/6fa94fb13a3e.js
deleted file mode 100644
index 070eccf27..000000000
--- a/api/search.index/6fa94fb13a3e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUAAAJwanRqeGp8aBQBKAAAGchx2mBwFAEUAAAwBHWE5HCOBAqCgAAAcSWFzJQBAAAATjBeNF2nPF9AXvRhBQgAAxBDFEEwWBhutHAUBwwAABrIcAIsXbXO1AUEAABTBG8IbAEsWbXM6DuER4hHjEeQR5RHmEc4Yzxh4GqUaphoFAcAAAAXRFxKJF4oXdXnnLgDKoMAAAB0BoHAAABh0sGAX0gMGwECoGzswAAABAAArAA4AsAoCAJUMFgCgEAMAYhMBALEXAACNGAEAzBkBAPYaAAAoGwAAqxsAADkcAABJHAAAVxwAAK8cAAA7A6AgAAAbHGFlbw==")
\ No newline at end of file
diff --git a/api/search.index/708d2263aeda.js b/api/search.index/708d2263aeda.js
deleted file mode 100644
index 7a306fcc7..000000000
--- a/api/search.index/708d2263aeda.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBDAAAE3htm3xzgHHUAQAAAFFIcUxxtdQ4nGCgYKRhXGFgYGxwcHBsCoBAAAA43ZG4FAEUAAAQUHGXPGRsCoCAAABpldXk3AAGFoBAAABsnsCAXRgABoEAAABpmAkEDOjAAAAEAAAAAABAAEAAAALcQzBA1Fk4WTxYuFzAXMReAGMwYlBkIGyYbPhs/G0wctxwxRAAAfBd9F34XfxcFAcAAAC/LHNoc2xwnzRtGHEccYXIjBAOgEAAAG9+wUBwpAGFlcHMBbRYAAPMAhBYBAPJrAQAA6hE=")
\ No newline at end of file
diff --git a/api/search.index/70ad1f4002a4.js b/api/search.index/70ad1f4002a4.js
new file mode 100644
index 000000000..3b4bf7fb1
--- /dev/null
+++ b/api/search.index/70ad1f4002a4.js
@@ -0,0 +1 @@
+rn_("FQBEAAADcxtsDxlxHDFIAADgHOQc9hz9HDFCAAAGHBQcSBxSHAUBwAAADEQdDSodYWgPB4eggAAAHP+ggAAAHQihUAAAHUygoAAAHTQeABzzgQJwdisCoCAAABzEb3I=")
\ No newline at end of file
diff --git a/api/search.index/70b7f3861b70.js b/api/search.index/70b7f3861b70.js
deleted file mode 100644
index 4a88039b6..000000000
--- a/api/search.index/70b7f3861b70.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUUAANQY4RniGTFFAACcGp0anhqfGlUBRAAAB4YaADkWb3O+EL8Q0xHUEdURXxgFAEAAAAPEG2q6GyUAQwAAAYEcZXUapRymHPMFAmxz9XEVAABHAtEBAQAEAQUBwAAABAgdBqoaY3TXBgCHoEAAABw6oLAAABweExESOjAAAAEAAAAAAAkAEAAAACYOfQ5+Dk8T8hbzFvQW9Rb2Fosc")
\ No newline at end of file
diff --git a/api/search.index/718316c260b6.js b/api/search.index/718316c260b6.js
deleted file mode 100644
index 4f336aad9..000000000
--- a/api/search.index/718316c260b6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("tQFCAAAEmBoDCxxmac4QqhFRFlIWUxZwFs0XzheCGpca0BzRHBUARQAABssbYsoXqxgVAUAAABl3GHgYKNgX2RfCGG50KxgsGDUARQAAFgUdBh1kdRx2HOcc6BwFAEEAAAYLHWT0HBODAqBAAAAc0m1vawOwMBHeBu9hdHcVAEEAAAbzHGQFG7YcKwKgEAAAHH5jZQkCoAAAAA1NoQAAAByQZnPrhKDgAAAcjBEBQFFIAADUF9UX1hfXF8AYwRgFAcgAACg2HDccfBwKwRx0dfsCYXIBBQA7MAAAAQAAggACALsXAADyGIEAMUIAAJAZkRlOGmAaRwIAhqCAAAAbLaAwAAAcwKBgAAAcpKAwAAAbBAEODAGfEAAAYUgAABUYFhgXGBgYGRgaGBsYBQBEAAABIBxpGBvzBgFm8mYXAAB2ARsCoLAAABsZZWlRRwAAcRZyFnMWdBaPF5AXBQHAAABRKg7HF2QcZRyWHJc [...]
\ No newline at end of file
diff --git a/api/search.index/71a6c01fc658.js b/api/search.index/71a6c01fc658.js
deleted file mode 100644
index aa652a8ee..000000000
--- a/api/search.index/71a6c01fc658.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAABUg4KFRtlaQUBRAAAB6wbB8IcY3MsGwEBAbAAEa4AAXM7MAAAAQAAEwAJANEMAABNDgQA8hcBAPoXAQAtGAEAUhgBAO4ZAQApGwEA9xsBAEsDoEAAAByvoIAAABqQY2x0JQBHAAADFBtmFBi6GrsaFQBCAAADOxdhrBGtEUsDoLAAABuroGAAABjjY250BQHCAAALHxw0ZBxlHJYclxxhZQEAz6AwAAAck6BAAAAYy3OLsN9yr6AgAAAOTKAwAAARq7BwG7sAAQn1QWl3zbAwGDEEqCfcJmYYs6BAAAAWIFh7pSrIdGSpVo5wFqBgAAAaXgEraeUhz7AgF/wAAcDuJE87MAAAAQAAuQEGAC0EAAAfBeYA3gwAACcOAAAKD84A2hEAAA==")
\ No newline at end of file
diff --git a/api/search.index/71acc0afbf86.js b/api/search.index/71acc0afbf86.js
new file mode 100644
index 000000000..033cc84b4
--- /dev/null
+++ b/api/search.index/71acc0afbf86.js
@@ -0,0 +1 @@
+rn_("BQHBAAACMBgFHBphZQUBwQAAAi8YBRsaYWVrA6AAAAAOZjEyMwEBAbBAHAQAUWU6MAAAAQAAAAAANgAQAAAAAw0EDQUNBg0HDQgNCQ0KDQsNDA0NDQ4NDw0QDRENEg0TDRQNFQ0WDRcNgxeiF6MXpBf5FwsYnRieGPAY8RgSGQwaEBq8Gr4azBoVGyIbLhtxG4AbCBwKHAwcDRwVHEccSxxmHHUcjhyzHAEdGx2TAASgUAAAHLagYAAAGC5lcnV2OzAAAAEAABYAAQD2CBYA")
\ No newline at end of file
diff --git a/api/search.index/71bd537e24aa.js b/api/search.index/71bd537e24aa.js
deleted file mode 100644
index b2263748c..000000000
--- a/api/search.index/71bd537e24aa.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAACL/Bv9G/4b/xsAHAEcAhwDHHscCNEbb3kxRAAAtBe1F7YXtxcFAcAAAAarGQMtF3J164SwYBjOAAEEwAQ=")
\ No newline at end of file
diff --git a/api/search.index/71bf10440904.js b/api/search.index/71bf10440904.js
deleted file mode 100644
index c9e4e5275..000000000
--- a/api/search.index/71bf10440904.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBGAAAFfRxyzhoxRwAAjxoqHCscjBzzAAJmbDswAAABAAAHAAIA0BAAAHMSBgATgQKwcBxjAIptcwUBwAAAEHoYWhwblByVHGV0BQHAAAAR0REdHAcnG2xz+wJlbK8AhbAwFl0AAaCgAAAaT6BgAAAckwFJAQ==")
\ No newline at end of file
diff --git a/api/search.index/720a9ac60c88.js b/api/search.index/720a9ac60c88.js
new file mode 100644
index 000000000..4549568a4
--- /dev/null
+++ b/api/search.index/720a9ac60c88.js
@@ -0,0 +1 @@
+rn_("BQLAAACLPRw+HD8cQBxBHEIcQxxEHL0cE2oczBwIEhxvcnkxRAAA7hfvF/AX8RcFAcAAAAboGQNnF3J1Dw7IoQAAABzesGAZCgABoBAAABN/sCAZ5AABoGAAABv5BEU4Ag==")
\ No newline at end of file
diff --git a/api/search.index/7231b1948de5.js b/api/search.index/7231b1948de5.js
deleted file mode 100644
index 2f208d9bb..000000000
--- a/api/search.index/7231b1948de5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBFAAAGChxiahgFAcEAAAJrGAJpGGJ08wABdPS0EAAACwEBACoGRQFCAAAksRuyG38cBegaY3c/F0AXHRgeGCEbKwKgQAAAGYtlaQUBRAAAD/4cEr0ZvhljcsIXBQHAAAAjpBilGL8bCTkbYW+3DACIsDAXPgSCoHAAABm/oDAAABgfNJgS9TQOAAABADAA6AjPAA==")
\ No newline at end of file
diff --git a/api/search.index/72b99e6f87a1.js b/api/search.index/72b99e6f87a1.js
new file mode 100644
index 000000000..9a45680ca
--- /dev/null
+++ b/api/search.index/72b99e6f87a1.js
@@ -0,0 +1 @@
+rn_("BQHAAAAF9hkEtBxjcwUAQgAAAkcdbTwdI4cCoIAAAB1LYWsjDgKgoAAAHUFhYwGLHAAAS4QFvAhNUsmgQAAAGSCgUAAAGdEYAANrA6AAAAAbGzFlaQ==")
\ No newline at end of file
diff --git a/api/search.index/72c7c7b6ccc5.js b/api/search.index/72c7c7b6ccc5.js
new file mode 100644
index 000000000..f59669798
--- /dev/null
+++ b/api/search.index/72c7c7b6ccc5.js
@@ -0,0 +1 @@
+rn_("IUsAABAZHhofGjUAQAAAE4wXjRdpXxhgGJEakhoFAEMAAACLF3OjHGMBA7AQGN4AAWluc/LvGAAAMwQFAcAAABXxGvIaArYaYW8FAEQAAAMJHG5hFwUBwAAABfAaFrka7BpsbgUBwAAAAyIdU+cX6BebGpwa/Br9Gmx1BQLDAAAICB0CSBwI9hxjdXcjBAKgYAAAGyJicAGdFgAAIUcAALAc7hzvHPsCbHT7AmFv9wAAhbAAHRAAEDSAAjswAAABAAAPAAYA7AgAAJEKAADNFwAAJhkFABUaBQAqHAAAe4SgMAAAGDgQEAY=")
\ No newline at end of file
diff --git a/api/search.index/72cceb956963.js b/api/search.index/72cceb956963.js
deleted file mode 100644
index 2247ba4e6..000000000
--- a/api/search.index/72cceb956963.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBEAAAKmRx3shcFAEQAAAqYHHexF/sCY3QxQQAAIg7SF9gachwFAcAAAAjeGCGIGL4b1BxvdmFBAACMF40XnhlmGuUb8xuSHPuEEEEC")
\ No newline at end of file
diff --git a/api/search.index/72df075704cf.js b/api/search.index/72df075704cf.js
new file mode 100644
index 000000000..21aeb3862
--- /dev/null
+++ b/api/search.index/72df075704cf.js
@@ -0,0 +1 @@
+rn_("BQBFAAAGCBxi+xcFAEcAABb3HPgcZgccE4MCoDAAABn4cHMbAqBwAAAbXmFlCQKhAAAAHOKgsAAAHKJhb0sDoEAAABvsoKAAABwsY3F0BQBJAAAG4Rx2XRsFAcAAAAa7HAHvGzNxBQHAAAACJBsEgxxpb0cChIagMAAAHCqgIAAAG+6gcAAAHHGgMAAAHCvAiAMjgQKgYAAAG1tjdBceAImgkAAAG1ygAAAACnug8AAAHNOhQAAAHQkckRYBYA0AAA==")
\ No newline at end of file
diff --git a/api/search.index/7318553fe376.js b/api/search.index/7318553fe376.js
new file mode 100644
index 000000000..c5b1df48c
--- /dev/null
+++ b/api/search.index/7318553fe376.js
@@ -0,0 +1 @@
+rn_("BQBBAAAE3hl0HxsTggKw8BzWAAFlcwEBAaEAAAAcaXTz7ggAAAEAAQAxQgAAohaxF7IX9RwFAEUAABDkF+UXc2AXSwOgUAAAFqCwEAqjDH5kbnL7hBBJAA==")
\ No newline at end of file
diff --git a/api/search.index/7340d756f0a1.js b/api/search.index/7340d756f0a1.js
deleted file mode 100644
index 4e783e600..000000000
--- a/api/search.index/7340d756f0a1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQBFAAAIcxxjZBrpHAUBwAAAA3kYBCIcYW/zAAJ0dffKEAAAfgEBAAEAlQYBAIIBVQBAAAAFihpldhZ3FncYeBiHGogaGwKwYBqLAAFmdBsCoGAAABnOZW8BAQOgQAAAHHewQBrsAAGgAAAAF5FmbXM7MAAAAQAAFQAHABIXDgCWGgAAJBsAAE8bAAA4HAAAyRwAAPocAQAHDQKJoEAAABuzoDAAABjDoEAAABxZoFAAABpjoCAAABZ1oIAAABz1JwkHOjAAAAEAAAAAAAsAEAAAADsOgg6DDoQOWxZcFk4X6hm4G2McwhztHPMAAWj2ZwoAAAEABgCyCzkAAQA=")
\ No newline at end of file
diff --git a/api/search.index/735f25c1e3f5.js b/api/search.index/735f25c1e3f5.js
new file mode 100644
index 000000000..26b96c3d0
--- /dev/null
+++ b/api/search.index/735f25c1e3f5.js
@@ -0,0 +1 @@
+rn_("FQBHAAAGNx1kRBv5HCsCsBAM9wo7bG21AUEAAAcZGQa0HGF2TRhOGAMZBBnKGcsZ8RryGi8cMBzaHNschQFEAAAHSRxgvxnAGcEZwhnDGcQZxRlyc1EYUhhTGFQYVRhWGFcY5hrnGhMBArCAHRkAAXN384YXAAArA0cBGwKwAAq8C6JtbvsDYWV1")
\ No newline at end of file
diff --git a/api/search.index/736931c1be68.js b/api/search.index/736931c1be68.js
deleted file mode 100644
index b1b7607e9..000000000
--- a/api/search.index/736931c1be68.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("MUoAAEsbTBtNG04bFQBAAAAUIRx4HHU9F9kYBQHCAABSghiDGIQYhRiGGIcYVNgZ2RnaGdsZ3BndGWt2UUoAAEUbRhtHG0gbSRtKG+8BxbBAF08AAQAIRgE=")
\ No newline at end of file
diff --git a/api/search.index/738a8b5ca49a.js b/api/search.index/738a8b5ca49a.js
new file mode 100644
index 000000000..09195e541
--- /dev/null
+++ b/api/search.index/738a8b5ca49a.js
@@ -0,0 +1 @@
+rn_("BQBGAAAGCxxm/xcVAUYAAAYKHAivHGJ3/Rf+F/MBAmNz9roKAAABAOcBAQABACgNKwOgEAAAG1tMwXf0MJ9rcnY=")
\ No newline at end of file
diff --git a/api/search.index/740113722ee0.js b/api/search.index/740113722ee0.js
deleted file mode 100644
index 4adb754d0..000000000
--- a/api/search.index/740113722ee0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQABsAARrgABczswAAABAAATAAkA0QwAAE0OBADyFwEA+hcBAC0YAQBSGAEA7hkBACkbAQD3GwEAKwKg0AAAGuRociFGAAAFHQYdCx0FAsMAAA7mHALFGwidHHR1dyMFAqBgAAAaf2JwAU4TAAAbAqAwAAAcr2FoNwgAiLBwGbgAkKBAAAAc/aCAAAAakLBAG7sAAaAwAAAZtRycBDowAAABAAAAAAAQABAAAACdF54XnxegF6EXohemGKcYgRmtG7MbdRx2HNIc5xzoHPQc")
\ No newline at end of file
diff --git a/api/search.index/740c26d25c3f.js b/api/search.index/740c26d25c3f.js
deleted file mode 100644
index fe4e27ee1..000000000
--- a/api/search.index/740c26d25c3f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QUIAADEYMhjEG8Ac2RwhQQAAzRtGHEccBQHAAAAQOhZmGAE7FmRvAYECoNAAABytoTAAABzeYXAFAEYAABA6G1Yccuka8wMBcAFsFgAAGwKgQAAAGLNhb7cBAoawcBrDAAGgwAAAHEU0QRD1Sg0AAAEAYQoaAfQA+wJlcw==")
\ No newline at end of file
diff --git a/api/search.index/745a191457ad.js b/api/search.index/745a191457ad.js
new file mode 100644
index 000000000..360f0ddbc
--- /dev/null
+++ b/api/search.index/745a191457ad.js
@@ -0,0 +1 @@
+rn_("IUMAAIIXABn/HBUAQgAAAckcaeMM5AwhRwAAahdrF7wYJQBGAAAR1Rp5HGmTFpQWiBcBBgA7MAAAAQAArwACAC0aVwCTG1cAJQBLAAAENh1m5RxTHVQd+wJxcgUBwwAAUMoQyxDMEM0QlBOVEzDbGtwa3RreGmFl9wMAh6BQAAAXcRTgDDowAAABAAAAAAAfABAAAACyCo0MjgyPDJAMkQySDJMMlAyVDJYMqg6DFmQXZReYF5kXmhetF64XyxfkF+UXAhsDGzgbSxtaGx0cLRzcHEUd")
\ No newline at end of file
diff --git a/api/search.index/7498255c4d3f.js b/api/search.index/7498255c4d3f.js
new file mode 100644
index 000000000..889f76539
--- /dev/null
+++ b/api/search.index/7498255c4d3f.js
@@ -0,0 +1 @@
+rn_("BQHAAAAUlRaWFhNyE3MTZnQFAEUAAAbhHHZdGwUBwAAABhQbANUQY3NXAQCFoJAAABq4oCAAAA5IYQAD810BAACUBwAE")
\ No newline at end of file
diff --git a/api/search.index/74e6901a7c54.js b/api/search.index/74e6901a7c54.js
deleted file mode 100644
index a85920d0b..000000000
--- a/api/search.index/74e6901a7c54.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQEAOzAAAAEAAKMAAgBJEwEAehWhAAUARgAABhMdZAkd8wEBYQEyDQAANwAAxaAAAAAQu6BwAAAcm6CAAAAagQABSCEBaQoAAA==")
\ No newline at end of file
diff --git a/api/search.index/7522b4de7d2c.js b/api/search.index/7522b4de7d2c.js
new file mode 100644
index 000000000..5da1298b6
--- /dev/null
+++ b/api/search.index/7522b4de7d2c.js
@@ -0,0 +1 @@
+rn_("BQBSAAAGUR1kQB0FAFQAAAZSHWRDHfOEAnB0BQBRAAAGTh1kNR0FAFgAAAZXHWRNHQUAUgAABlUdZEYdBQBPAAAGUB1kOx3zhwJjcAUASQAABj0dZA0dE4QDoMAAAB0coIAAABz6ZnBzGwKhQAAAHTpmbAUAWgAABlYdZEgd+wJhZacZAMlmgp/O6x2gwAAAHJqgwAAAHJugMAAAGAMAC4QdAXIbAAAJAjo5j1ci77AgFyoAAWVuBQBDAAAEuhx1FRnzAgFv8p4WAAADAWUAQwAABg8ccvIY8xj0GPUY9hj3GPgYdwEAhaAQAAAOVIFBQAGZDAAA")
\ No newline at end of file
diff --git a/api/search.index/752aa26bd604.js b/api/search.index/752aa26bd604.js
new file mode 100644
index 000000000..f65f4b440
--- /dev/null
+++ b/api/search.index/752aa26bd604.js
@@ -0,0 +1 @@
+rn_("ZQJGAAAhHxggGOMZArkYEroYuxhpbHK5FukX6heZGJoYUxxUHBUATQAAAIEbczQbVhwFAFEAAAZOHWQ1HQUAWAAABlcdZE0d84cCcnYVAUcAABaAG2YcAiQZYnKFF5EYzwXHsHAXhAPQoMAAABrQsFATkgABAAmkDAUBwQAABCUdBTAdcXNDAAOgYAAAHTegYAAAG2Zkb3I7MAAAAQAAJwARAFYNAQB0Fg0ADhgDAK4YAAD8GAEAHhkAALEZAADnGQAAARoDABIaAACmGgEABBsBAEQbAAB6GwAAWBwAAKgcAAD5HAAANQFAAAAXLRzcHAApF2ZzWBZZFloWWxY1AkEAABEEEZYYBfMXFTIYExtpcnOsCq0KYhdjF/UAQAAABXEXdbIKjQyODI8MkAyRDJIMkwyUDJUMlgxkF2UXOBtLGx0cMUMAABYZJhsJHG8cBQHBAAAFSxsGKBxmbjUAQAAABMkccAIbAxstHNw [...]
\ No newline at end of file
diff --git a/api/search.index/75651ea3159e.js b/api/search.index/75651ea3159e.js
new file mode 100644
index 000000000..db1d6e8b8
--- /dev/null
+++ b/api/search.index/75651ea3159e.js
@@ -0,0 +1 @@
+rn_("MUoAAIobixuMG40bBQHCAABSvhi/GMAYwRjCGMMYVBUaFhoXGhgaGRoaGmt2UUoAAIQbhRuGG4cbiBuJG+uEsEAXiQABIBgC")
\ No newline at end of file
diff --git a/api/search.index/75c1c764a00f.js b/api/search.index/75c1c764a00f.js
new file mode 100644
index 000000000..c26c0a92b
--- /dev/null
+++ b/api/search.index/75c1c764a00f.js
@@ -0,0 +1 @@
+rn_("BQHAAAAHhxoD8hllcAUARQAAB6kcc/saKwKgMAAAGcxtdAGFA6BAAAAcAKFAAAAdQqCAAAAcwWNlbBsCsGAb9gABbnTzAANhZXMBSx0AAA==")
\ No newline at end of file
diff --git a/api/search.index/75f8379d37e7.js b/api/search.index/75f8379d37e7.js
deleted file mode 100644
index 5455bffa2..000000000
--- a/api/search.index/75f8379d37e7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBAAAADxBtquhslAEMAAAGBHGV1GqUcphwVAEcAAAReHGXzGvQaKwKgEAAAGxtkemFCAAAHFwgXCRcKFwsXDBcNF5cJAIiwYBmAAnugEAAAELugIAAAE1WgQAAAGGccSQP1cRUAAEcC0QEBAAQB")
\ No newline at end of file
diff --git a/api/search.index/762e7bbc3f3c.js b/api/search.index/762e7bbc3f3c.js
new file mode 100644
index 000000000..3a2c6ad4c
--- /dev/null
+++ b/api/search.index/762e7bbc3f3c.js
@@ -0,0 +1 @@
+rn_("NQFDAAAXLRzcHAApF2ZzWBZZFloWWxYFAEAAAAMFHGr7GyUAQwAAEcMc3hxltBroHOkc8wECbHP1qBUAAEoC1AEBAAYBOwOgEAAADlNhZnTzAAFp9I8TAAABABgFAQAhSgAA7BntGTYb+wJjdA==")
\ No newline at end of file
diff --git a/api/search.index/76700f5fd1f0.js b/api/search.index/76700f5fd1f0.js
deleted file mode 100644
index 39d262de4..000000000
--- a/api/search.index/76700f5fd1f0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUIAAF4XXxdgFxUARQAABZwcY0AcQRwFAEkAAAbXHGJqHFOFA6AAAAAY2GZzd/OBAmRpBQHBAAAFThoX5hjnGGVpEwACoAAAABsbYXP1WQ4AAAgIhQDEA/YBbwDFsBAWWAJCoBAAAA5VSOzAR/LMQAIAig==")
\ No newline at end of file
diff --git a/api/search.index/767f0b565275.js b/api/search.index/767f0b565275.js
new file mode 100644
index 000000000..af8604cd4
--- /dev/null
+++ b/api/search.index/767f0b565275.js
@@ -0,0 +1 @@
+rn_("MUgAAOAc5Bz2HP0cMUIAAAYcFBxIHFIcZQBDAAAIRB1iqhWrFawVrRWuFa8VsBUbA6DQAAAdKqAwAAAbFmFoaUFAAAB/CoAKVxaRFpIWYUgAAM0YzhjPGNAY0RjSGNMYBQBSAAAGUR1kQB0FAFQAAAZSHWRDHfOEAnB0BQBRAAAGTh1kNR0FAFgAAAZXHWRNHQUAUgAABlUdZEYdBQBPAAAGUB1kOx3zhwJjcAUASQAABj0dZA0dE4QDoMAAAB0coIAAABz6ZnBzGwKhQAAAHTpmbAUAWgAABlYdZEgd+wJhZacZAMlmgp/O6x2gwAAAHJqgwAAAHJugMAAAGAMAC4QdAXIbAAAFAcEAAAQlHQUwHXFz8wIBcjswAAABAAAiAA0AdBYNAA4YAwCuGAAA/BgBAB4ZAADnGQAAARoDABIaAACmGgEABBsBAHobAABYHAAAqBwAAPOBAml5KwKgkAAAHTRucgUASwAABlc [...]
\ No newline at end of file
diff --git a/api/search.index/774288ea54cd.js b/api/search.index/774288ea54cd.js
new file mode 100644
index 000000000..bfcdd09a8
--- /dev/null
+++ b/api/search.index/774288ea54cd.js
@@ -0,0 +1 @@
+rn_("AQEAOzAAAAEAAMUAAQCXE8UAMUIAACwZLRkvG3cb+wJvdfMAAW07MAAAAQAAzgAEAFoBAAC/CAAA1QrLAHcOAAA=")
\ No newline at end of file
diff --git a/api/search.index/78633cd11502.js b/api/search.index/78633cd11502.js
deleted file mode 100644
index a99201ce0..000000000
--- a/api/search.index/78633cd11502.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QUIAAEoX3RfeFxUbrBtlAEMAAAbaGnJXF1gXWRdaF1sXXBddFxsCoPAAAByMYXIFAEMAAAR4HHXZGPMEAW/yZhYAAAEBZQBIAAAGLRxy4xnkGeUZ5hnnGegZ6RnHAQCFoKAAABszoMAAABs2GCAF8l4MAAA0CzsDoNAAABrgZWl1BQBAAAAQfw7xGm5FBBUAQAAACpkadcQMxQyhQAAAswqqEAQYBRgGGAcYCBjhGuIaKRyKHKUCQQAAJrQYtRjWGgbXGggIHWJvco0MjgyPDJAMkQySDJMMXxZEF9EY0hgFAcAAAA+THAhfGmFlNwAAhaAwAAAR2rAwDnYAAbBgGvIBPzhAQDswAAABAAAIAAMAOwQAAL4HBgAuDgAALw/JoEAAABvRoBAAABzTsLAa8gE/oCAAABY2ABOOCg==")
\ No newline at end of file
diff --git a/api/search.index/78b35ab6d3f3.js b/api/search.index/78b35ab6d3f3.js
deleted file mode 100644
index 07b1516ac..000000000
--- a/api/search.index/78b35ab6d3f3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAABDYRdiF2MXZBdlFzcAGwEbAhsDG2918wABcgHICAAABQBCAAAGER1kAh3zAAFtAZ0QAAAFAcAAABF+GH8YCNMcZW9xQQAAVhZXFuUX5hemGawZBxtLHAUASgAABgodZPEcZwMBhqAwAAAYVKAgAAAYfYIJAzowAAABAAAAAAAdABAAAACBFoMWrxewF8AXXRheGJsYnBidGJ4YnxigGKEYeRmRGtMaJRu5G9cb2BvZG9obEhwTHCQcTxxQHFgcnhwFAEIAAAIDHW34HCOHAqCAAAAdB2FrIwsCoKAAABz9YWMBShwAADuEoCAAABpmoIAAAByPCECEFQRAAAADNhYUUxNUEwfLFwQGFwolG2FlaXR3ZQpmCjcBAIWwYBxjAIqwcByUAAEQoQTzrhEAAAEAQAU=")
\ No newline at end of file
diff --git a/api/search.index/78de1744e8eb.js b/api/search.index/78de1744e8eb.js
deleted file mode 100644
index 66db7b734..000000000
--- a/api/search.index/78de1744e8eb.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBEAAADyBtuJxcFAcAAAAPeHFOtF64XXBpdGr0avhpsdSFIAABuHKscrBz7AmFvVwAAhaBgAAAasbBgGrIAAbAAHM0ADzSAAjswAAABAAAOAAUA2AgAAHkKAACTFwAA6hgFANgZBQAbAqAwAAAX/mV0")
\ No newline at end of file
diff --git a/api/search.index/78dec25dd853.js b/api/search.index/78dec25dd853.js
new file mode 100644
index 000000000..a90343514
--- /dev/null
+++ b/api/search.index/78dec25dd853.js
@@ -0,0 +1 @@
+rn_("AYECsUAdKAABsPAc8wABZ3MVAUsAAAfNHAWeHGJmIxsqHQUBwAAAAA8dBgkZZXQFAcMAAAzdHA8RHWNm+4QRQQA=")
\ No newline at end of file
diff --git a/api/search.index/78fd625ae34d.js b/api/search.index/78fd625ae34d.js
new file mode 100644
index 000000000..ebfa915d3
--- /dev/null
+++ b/api/search.index/78fd625ae34d.js
@@ -0,0 +1 @@
+rn_("BQHAAAAH5xwiBxgIGNYab3kjAQKwYBoAAh5sdDowAAABAAAAAAAJABAAAADqEOsQAxIEEgUSBhKnF8QY/xsYHQUBxQAAKLAc7hzvHAQiHWFvBQHAAAAEARsi7RjuGH4cb3kVAEoAAAZSHWQEHUMdBQHAAAACnBwJMR1pbxMIAqAwAAAc1GZp9zUcAABCAAEARgAMAAEANwAhRQAADh0eHR8dJQBAAAADNBxpEBwRHIkcIUIAAP4Z/xmfHDFBAAD+Gv8aABvPHAUBwAAAFQ0cAR0CMxx1efMBhAIBAzowAAABAAAAAAAMABAAAAAGGOgY6RjqGOsY7BipGjcbFxx9HOYc8RwcHfsCZWzzAANwdHUBbxYAABUAQQAABSkbd7QXtRcVAEAAABQKHQsdbe8a6hz7AmRuRQBDAAAAHRxzrRjQGYIbgxtXHCsCoEAAABsqYWkFAEEAACV/GzocOxx3kBoFAcAAAApYHAcyHGx [...]
\ No newline at end of file
diff --git a/api/search.index/799db173fc49.js b/api/search.index/799db173fc49.js
deleted file mode 100644
index 4b633ca7a..000000000
--- a/api/search.index/799db173fc49.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBAAAASyxfjGHJJDUUCQQAAFYoYixgaGBwZHDNVF1YX1Rg5G29zdAgNCQ0KDQsNShpvAIWgsAAAHJGgIAAAHJGwEBZ9ATZAICM=")
\ No newline at end of file
diff --git a/api/search.index/79e633cb0edc.js b/api/search.index/79e633cb0edc.js
new file mode 100644
index 000000000..3384f7b12
--- /dev/null
+++ b/api/search.index/79e633cb0edc.js
@@ -0,0 +1 @@
+rn_("BQHAAABDmxecF50XnhefFzc/G0AbQRtCG2918wABcgHcCAAABQBCAAAGVR1kRh3zAAFtAccQAAAFAcAAABG6GLsYCBYdZW9xQQAAjhaPFh8YIBjjGekZRhuMHAUASgAABk4dZDUdZwMBhqAwAAAYkKAgAAAYuYIJAzowAAABAAAAAAAdABAAAAC5FrsW6RfqF/oXmRiaGNcY2BjZGNoY2xjcGN0YthnQGhIbZBv6GxgcGRwaHBscUxxUHGUckByRHJoc4RwFAEIAAAJHHW08HSOHAqCAAAAdS2FrIwsCoKAAAB1BYWMBixwAADuEoCAAABqloIAAABzRCECEFQRAAAADbhYUhROGEwcFGARAFwpkG2FlaXR3fQp+CjcBAIWwYBylAIywcBzWAAEQoQTz2hEAAAEATgU=")
\ No newline at end of file
diff --git a/api/search.index/7a2fd351f7e4.js b/api/search.index/7a2fd351f7e4.js
new file mode 100644
index 000000000..76a126f74
--- /dev/null
+++ b/api/search.index/7a2fd351f7e4.js
@@ -0,0 +1 @@
+rn_("BQBEAAAH4hxwsBYFAcAAABK2GJwcGaUcMR1pbxMAA7AwGdsC+bAwGdwAAWZpcDowAAABAAAAAAAOABAAAACIFhIYExj+GAUaBhoGGw4bNRx3HHgcvhzKHMscAh1jAAOgMAAAGQFmc3QBMRcAAA==")
\ No newline at end of file
diff --git a/api/search.index/7a9f7c9e1bb1.js b/api/search.index/7a9f7c9e1bb1.js
new file mode 100644
index 000000000..6e6d58505
--- /dev/null
+++ b/api/search.index/7a9f7c9e1bb1.js
@@ -0,0 +1 @@
+rn_("BQHAAAAFuxYZmRiaGGVpBQBLAAAAOBtz0xoFA8AAAFTKEMsQzBDNEJQTlRMmkxaUFogXJ2oXaxe8GBLjDOQMY25vcBUARAAAAB0cc4IbgxsTiAKgMAAAGzdmcwUARwAAACQYc4cXIUsAAOwZ7Rk2GwUBwAAAAjMdAS8dYW/zAwFw8iUZAAB5ASODAqAAAAAcyGRmFQBEAAAM5hxwVh1XHQUAQwAAFBMaFBpjlhMFAEQAAATUGmO8GTMAA6CQAAAa1WZyc/K+CAAAxAr/AIWgoAAAGtIoKCABgQKhEAAAHOagcAAAGSVmbBUARgAACNUcczYcNxzXfADLoMAAABs1sDAOZAABoQAAABxYQE8kDQF5AQAA")
\ No newline at end of file
diff --git a/api/search.index/7aaffda0d00b.js b/api/search.index/7aaffda0d00b.js
new file mode 100644
index 000000000..a09ff475d
--- /dev/null
+++ b/api/search.index/7aaffda0d00b.js
@@ -0,0 +1 @@
+rn_("AQCEoDAAABDWoDAAABDXoEAAABN9oHAAABf3ABUBOjAAAAEAAAAAACEAEAAAAM8I0AjRCNII0wjUCNUI1gjXCNgI2QjaCGsKbAptCm4K8BD7EHQThROGE3wXBRgTGR8ZIBkiGSMZzxr+GwQcVRxgHKAc")
\ No newline at end of file
diff --git a/api/search.index/7ad727d47a71.js b/api/search.index/7ad727d47a71.js
deleted file mode 100644
index 62224e33f..000000000
--- a/api/search.index/7ad727d47a71.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQBDAAAGEx1kCR3zAgFvAU0WAAATAISgQAAAF46wkBywAAGgEAAAHHMRQQDyrAwAAIYAIUYAAN0X3hesGwUAQgAAM1EbUhs1HFQcbHMYKwKwwBziAAFjZisCsDAWeQABbW7rhKAwAAAYCgFABQ==")
\ No newline at end of file
diff --git a/api/search.index/7b142a520c8e.js b/api/search.index/7b142a520c8e.js
new file mode 100644
index 000000000..7f9aa42cd
--- /dev/null
+++ b/api/search.index/7b142a520c8e.js
@@ -0,0 +1 @@
+rn_("BQHAAAADzBkF+xptdCsCsHAb9gABYWWHAIOHoNAAAB0QoOAAABztoBAAABc9oQAAAB0goNAAABy9oMAAABykLJAG")
\ No newline at end of file
diff --git a/api/search.index/7b2ec151046f.js b/api/search.index/7b2ec151046f.js
new file mode 100644
index 000000000..54cf39370
--- /dev/null
+++ b/api/search.index/7b2ec151046f.js
@@ -0,0 +1 @@
+rn_("BQHBAAAFSxsGKBxmbjUAQAAABMkccAIbAxstHNwcBQHAAAAH/BwBURxhbwUBxAAAAjMdAS8dYW8jhQKgAAAAHMhkZgUBxAAABiQdAxQdb3QbAqDgAAAdP2hvZzQAiqBQAAAahaAwAAAcdKGAAAAdVLBAHK0AAaBAAAAcsi6YBzowAAABAAAAAAAJABAAAABtDm4Obw6KGosakxocHGEchBwGHQ==")
\ No newline at end of file
diff --git a/api/search.index/7b327a01fdb7.js b/api/search.index/7b327a01fdb7.js
deleted file mode 100644
index b2be0a531..000000000
--- a/api/search.index/7b327a01fdb7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHDAAASghatGRNMF3Iaa24lAEEAAAjbG2I/Dt0Y1Ro1AUIAAFHnF+gX6RfKGXMahRoVkhoMHGlzyRrKGtIbBRzzAgJrbwHRGwAA+wJlbw==")
\ No newline at end of file
diff --git a/api/search.index/7b6c7e875342.js b/api/search.index/7b6c7e875342.js
deleted file mode 100644
index a23862419..000000000
--- a/api/search.index/7b6c7e875342.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("cUAAAC8WghmDGYQZhRmGGYcZiBkFAcEAAAQtHBWEGggccXMFAcsAAAThHAXsHHFzYUUAAFUaVhpXGlgaWRpaGlsaJwcCh6DAAAAcMbBAGGwAAaBwAAAagxGhAzswAAABAAAkAAgAtRABAMERAwAVGAYAkRgGAOMZBgBrGgYAmRoAAKcaAQAbAqAwAAAchWFl")
\ No newline at end of file
diff --git a/api/search.index/7b983520648c.js b/api/search.index/7b983520648c.js
new file mode 100644
index 000000000..6222197b9
--- /dev/null
+++ b/api/search.index/7b983520648c.js
@@ -0,0 +1 @@
+rn_("BQBAAAAEJxxjWRvzAwFzAdIaAAATAAOggAAAG+ugMAAAGo5mcnQBUA4AAEMAhKBAAAAXH6AgAAAaj7AQFyoAAUkABPLkCAAAAwk=")
\ No newline at end of file
diff --git a/api/search.index/7bf6f4b2c347.js b/api/search.index/7bf6f4b2c347.js
deleted file mode 100644
index 7e9db6db6..000000000
--- a/api/search.index/7bf6f4b2c347.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQUAOzAAAAEAAKMAAgBJEwEAehWhABUAQwAAIIcXyxrMGnPRGdIZFQBAAAAEOhxifQ5+DvOBAmRt+wJydhUARQAABssbYsoXqxhDAAOgQAAAF0KgcAAAGNxlbXcB1wwAAFFBAADZGtoa7hrOGy0c4RzVAEcAAATyHGaXGZgZmRmaGZsZnBmdGbQb6BvtG/AbohwPHRAdGwKgYAAAGxtjdPsDbnN0MUEAAEgOeRchHHgcIUIAAF4XXxdgFxUARQAABZwcY0AcQRwFAEkAAAbXHGJqHFOFA6AAAAAY2GZzd/OCAmRp84ECaXT7A2FlaQ==")
\ No newline at end of file
diff --git a/api/search.index/7c0b0f336d43.js b/api/search.index/7c0b0f336d43.js
deleted file mode 100644
index 33ea34e24..000000000
--- a/api/search.index/7c0b0f336d43.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQBBAAAI2xtiPw7dGNUaNQFCAABR5xfoF+kXyhlzGoUaFZIaDBxpc8kayhrSGwUc8wACa28B0RsAACMAAqBwAAAbJm9zOzAAAAEAAAcAAgAvFgAAghkGAAUBwQAABC0cFYQaCBxxcwUBygAABOEcBewccXMrAqAgAAAZuWFy1QBEAAAE8hxmlxmYGZkZmhmbGZwZnRm0G+gb7RvwG6IcDx0QHUsDsDAQpAKkoGAAABqDZG91JQBBAAASbBhtGGVLEkwSTRIFAcAAAAOQGmRVGlYaVxpYGlkaWhpbGnJ4BQBQAAAGEx1kCR0rArBwG/UAAWRyBQBFAAAGxxtiwRcFAEcAABa0HLUcZsYbE4MCoDAAABm7cHMbAqBwAAAbH2FlCQKhAAAAHJ+gsAAAHGBhb0sDoEAAABuroKAAABvrY3F0BQBJAAAGnhx2HhsFAcAAAAZ5HAGuGzNxBQHAAAAC5RoEQhxpb0cChIagMAA [...]
\ No newline at end of file
diff --git a/api/search.index/7cc3fe9b3b4b.js b/api/search.index/7cc3fe9b3b4b.js
deleted file mode 100644
index ba5b09cac..000000000
--- a/api/search.index/7cc3fe9b3b4b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQBEAAAG7hpygBeBF4IXgxeEF4UXhhcFAcsAAAThHAXsHHFzEwQCoGAAABwtcHI7MAAAAQAADQACAOMZBgBrGgYAYwADsIAafAHsZ3N0OzAAAAEAAMYAAwB6EsMArhkAABYbAQA=")
\ No newline at end of file
diff --git a/api/search.index/7cda9c576e53.js b/api/search.index/7cda9c576e53.js
new file mode 100644
index 000000000..cc630151d
--- /dev/null
+++ b/api/search.index/7cda9c576e53.js
@@ -0,0 +1 @@
+rn_("BQHAAAAF9hkEtBxjcwUAQgAAAkcdbTwdI4cCoIAAAB1LYWsjDgKgoAAAHUFhYwGLHAAAS4QFvAhNUsmgQAAAGSCgUAAAGdEYAAP7AmVp")
\ No newline at end of file
diff --git a/api/search.index/7ceced79926c.js b/api/search.index/7ceced79926c.js
deleted file mode 100644
index 21bab7f13..000000000
--- a/api/search.index/7ceced79926c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQBAAAAWBR0GHWR1HHYc0hznHOgcFQBKAAAGBh1kdhzoHAUBwQAABxkbA9saZXDzgQJpcgUARAAAASAcaRgb8wYBZvNmFwAAdgHjABUASwAABgUdZHUc5xwrAqCQAAAcLnB4+4QRAQI=")
\ No newline at end of file
diff --git a/api/search.index/7d4918a5ecfb.js b/api/search.index/7d4918a5ecfb.js
deleted file mode 100644
index 6e93ec901..000000000
--- a/api/search.index/7d4918a5ecfb.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHpBwizRfOF5cab3kFAcAAABXDGd0bBLAbaXljAAOgcAAAF8dkbHQ6MAAAAQAAAAAACgAQAAAAVQ7AEMEQ1hHXEdgR2RFtF4gYvhvUHAEEADswAAABAACjAAIASRMBAHoVoQD7AmFl")
\ No newline at end of file
diff --git a/api/search.index/7d52282ac7bc.js b/api/search.index/7d52282ac7bc.js
deleted file mode 100644
index acf43cbbc..000000000
--- a/api/search.index/7d52282ac7bc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IUYAALQYtRjWGhMAA6BgAAAa16CAAAAdCGJvcjowAAABAAAAAAARABAAAACNDI4MjwyQDJEMkgyTDF8WRBe6F9EY0hi2GQkbChuvG0IcgRxRTAAA1xvYG9kb2htPHFAcOwOgsAAAHCRmcnQ=")
\ No newline at end of file
diff --git a/api/search.index/7e0f8b993960.js b/api/search.index/7e0f8b993960.js
new file mode 100644
index 000000000..bcfaab79a
--- /dev/null
+++ b/api/search.index/7e0f8b993960.js
@@ -0,0 +1 @@
+rn_("IUYAAPAY8RgVGxMAA6BgAAAbFqCAAAAdTGJvcjowAAABAAAAAAATABAAAACsDK0MrgyvDLAMsQyyDLMMlxZ+F/QXDRkOGfMZSBtJG/AbgxzDHN4cUUwAABgcGRwaHBsckByRHDsDoLAAABxlZnJ0")
\ No newline at end of file
diff --git a/api/search.index/7e352d8dfc5a.js b/api/search.index/7e352d8dfc5a.js
deleted file mode 100644
index 9222c85c9..000000000
--- a/api/search.index/7e352d8dfc5a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQHAAAAHuRwBEBxhbwUBxAAAAu8cAescYW8jhQKgAAAAHIZkZgUBxAAABuAcA9Ecb3QbAqDgAAAc+2hvNwGGh6AwAAAcM6GAAAAdEKBAAAAccKBQAAAchyyIAwUBwAAAB7gcAQ8cYW8FAcQAAALuHAHqHGFvI4UCoAAAAByEZGYFAcQAAAbfHAPQHG90GwKg4AAAHPpobzcBhoegMAAAHDKhgAAAHQ+gQAAAHG+gUAAAHIUsiANjAISgYAAAF8egkAAAGzslgAABTA0AAA==")
\ No newline at end of file
diff --git a/api/search.index/7e3bda17fa0b.js b/api/search.index/7e3bda17fa0b.js
new file mode 100644
index 000000000..c0f3384d2
--- /dev/null
+++ b/api/search.index/7e3bda17fa0b.js
@@ -0,0 +1 @@
+rn_("FQFDAAAFQxsGDx10d2wbMhwFAEcAAAxFHWF6HCMEA6AgAAAc8KBgAAAbF3J0dgGKHAAAGwKg0AAAHKFjdAUBQwAABhUbBhYbYm+XFhOBAqDgAAAcamFjAQIAOzAAAAEAAMcAAgDREAAAXRTGAIcOAIigwAAAGxSgQAAAE3SgkAAAGQ2hEAAAHOcxkAc7MAAAAQAAygAEAPIIAQCoCgAAqAvGAKsOAAABAISgMAAAENagMAAAENegQAAAE32gcAAAF/cAFQE6MAAAAQAAAAAAIQAQAAAAzwjQCNEI0gjTCNQI1QjWCNcI2AjZCNoIawpsCm0KbgrwEPsQdBOFE4YTfBcFGBMZHxkgGSIZIxnPGv4bBBxVHGAcoBz7AnJ3CYSgYAAAHUyAF4AAEyFtCPjlPKmgUAAAF/coIAIFAUEAAAcUGwJIDmFy8QjzAANhZW/yXgEAAAEA")
\ No newline at end of file
diff --git a/api/search.index/7e970499226c.js b/api/search.index/7e970499226c.js
new file mode 100644
index 000000000..154ed2c38
--- /dev/null
+++ b/api/search.index/7e970499226c.js
@@ -0,0 +1 @@
+rn_("BQHBAAACMBgFHBphZQUBwQAAAi8YBRsaYWVrA6AAAAAOZjEyM/UAQAAABXEXdbIKjQyODI8MkAyRDJIMkwyUDJUMlgxkF2UXOBtLGx0cBQLBAAAQUQ6qGBBnDhAbA7YcZm5zMUMAABYZJhsJHG8cBQHBAAAFSxsGKBxmbjUAQAAABMkccAIbAxstHNwcBQHAAAAH/BwBURxhbwUBxAAAAjMdAS8dYW8jhQKgAAAAHMhkZgUBxAAABiQdAxQdb3QbAqDgAAAdP2hvZzQBiqBQAAAahaAwAAAcdKGAAAAdVLBAHK0AAaBAAAAcsi6YBzowAAABAAAAAAAJABAAAABtDm4Obw6KGosakxocHGEchBwGHQEAArBAHAQAUaAgAAAcoGVyOjAAAAEAAAAAADYAEAAAAAMNBA0FDQYNBw0IDQkNCg0LDQwNDQ0ODQ8NEA0RDRINEw0UDRUNFg0XDYMXohejF6QX+RcLGJ0Ynhj [...]
\ No newline at end of file
diff --git a/api/search.index/7eca2a550102.js b/api/search.index/7eca2a550102.js
new file mode 100644
index 000000000..b44198da5
--- /dev/null
+++ b/api/search.index/7eca2a550102.js
@@ -0,0 +1 @@
+rn_("FQBFAAAItRxjoxotHQUBwAAAArUYFgIYzxlichsCoEAAABxjYW/zAAJ0dff0EAAAhAEBAAEAoQYBAIUBVQBAAAAFyRplrhavFrMYtBjGGscaGwKwYBrKAAFmdBsCoGAAABoLZW8FAcAAABG8Cl4WEvcMMhdhdQEAA6BAAAAcubBAGysAAaAAAAAXy2ZtczswAAABAAAVAAcATBcOANUaAABjGwAAjhsAAHkcAAAMHQAAPh0BABsCsAAI5AkDZG4FAcEAAAOiGhIbGMIacnUFAEAAAASzF3XjCBsDoLAAABzRoDAAAA5acXJ4BQBBAAAGTx1kOB0TiQKgQAAAHRVtb0sDoCAAABZdoDAAABv0YmdslzsAjKAwAAAY/6BAAAAcm6AgAAAWraCAAAAdOaAgAAAbQzcpRzowAAABAAAAAAARABAAAABpAWoBawEiBF8Opw6oDqkOkxaUFkoXSxeIFyca+RulHAUdMR0=")
\ No newline at end of file
diff --git a/api/search.index/7fff1b7b3fa5.js b/api/search.index/7fff1b7b3fa5.js
new file mode 100644
index 000000000..f0f5d08b7
--- /dev/null
+++ b/api/search.index/7fff1b7b3fa5.js
@@ -0,0 +1 @@
+rn_("xQJAAAAXEB0gHUPcEN0QgxOEE2sYAJgMZWZzvgrxEfIR8xH0EfUR9hFnFmgWaRZqFmsWbBYhRQAA1hzXHAAdMUEAAAYcFBxIHFIcJAFDZmluAAAFZWFkZXJ+FwVyaXRlcn8XcnfACqoMqwzygAEDZnJzdA==")
\ No newline at end of file
diff --git a/api/search.index/desc/31c62c505666.js b/api/search.index/desc/31c62c505666.js
deleted file mode 100644
index 2c7630aa1..000000000
--- a/api/search.index/desc/31c62c505666.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("BkThe catalog type that this builder creates.AkThe associated writer type.B`The associated file writer type.AlReturn type of this visitor.0BkReturn type of this visitor on arrow field.BlReturn type of this visitor on arrow schema.BaLocal filesystem storage factory.CgMatch fields by their ID stored in Arrow field metadataAjContains the success value0CoOr predicate, for example, <code>a &gt; 10 OR b &lt; 20</code>.EnAn expression combined by <code>OR</code>, for example, <code>a &gt;  [...]
\ No newline at end of file
diff --git a/api/search.index/desc/76d56a7ca3b2.js b/api/search.index/desc/76d56a7ca3b2.js
new file mode 100644
index 000000000..d5f6a5460
--- /dev/null
+++ b/api/search.index/desc/76d56a7ca3b2.js
@@ -0,0 +1 @@
+rd_("BkThe catalog type that this builder creates.AkThe associated writer type.B`The associated file writer type.AlReturn type of this visitor.0BkReturn type of this visitor on arrow field.BlReturn type of this visitor on arrow schema.BaLocal filesystem storage factory.CgMatch fields by their ID stored in Arrow field metadataAjContains the success value0CoOr predicate, for example, <code>a &gt; 10 OR b &lt; 20</code>.EnAn expression combined by <code>OR</code>, for example, <code>a &gt;  [...]
\ No newline at end of file
diff --git a/api/search.index/entry/32ddfbf9be05.js b/api/search.index/entry/32ddfbf9be05.js
deleted file mode 100644
index d0cf53a8d..000000000
--- a/api/search.index/entry/32ddfbf9be05.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("Al[3390,17,3391,3321,6243,0,0]Al[3390,17,3258,3258,7112,0,0]Al[3390,17,5870,5870,6782,0,0]Al[3390,17,2003,3619,6099,0,0]Al[3390,17,2003,3619,7283,0,0]Al[3390,17,2271,3223,6873,0,0]0Al[3390,15,1310,1310,6791,0,0]Al[7264,15,7265,7265,7183,0,0]Al[3390,15,2271,2682,6246,0,0]2Al[3390,15,3391,2645,2735,0,0]Al[7147,15,2644,2644,2736,0,0]Al[3390,15,1310,4564,4288,0,0]Al[3390,15,1310,4564,6240,0,0]5Al[7264,15,7265,7265,6257,0,0]Al[3390,15,2003,6346,6081,0,0]Al[3390,15,2003,6230,6802,0,0]11Ao [...]
\ No newline at end of file
diff --git a/api/search.index/entry/6fbfe377c789.js b/api/search.index/entry/6fbfe377c789.js
new file mode 100644
index 000000000..20ce35d0b
--- /dev/null
+++ b/api/search.index/entry/6fbfe377c789.js
@@ -0,0 +1 @@
+rd_("Al[3424,17,3425,3354,6303,0,0]Al[3424,17,3290,3290,7177,0,0]Al[3424,17,5928,5928,6845,0,0]Al[3424,17,2021,3655,6157,0,0]Al[3424,17,2021,3655,7349,0,0]Al[3424,17,2291,3255,6936,0,0]0Al[3424,15,1321,1321,6854,0,0]Al[7330,15,7331,7331,7248,0,0]Al[3424,15,2291,2706,6306,0,0]2Al[3424,15,3425,2669,2760,0,0]Al[7212,15,2668,2668,2761,0,0]Al[3424,15,1321,4609,4330,0,0]Al[3424,15,1321,4609,6300,0,0]5Al[7330,15,7331,7331,6317,0,0]Al[3424,15,2021,6406,6139,0,0]Al[3424,15,2021,6290,6865,0,0]11Ao [...]
\ No newline at end of file
diff --git a/api/search.index/function/61c816f00935.js b/api/search.index/function/61c816f00935.js
new file mode 100644
index 000000000..d4c2ef5b4
--- /dev/null
+++ b/api/search.index/function/61c816f00935.js
@@ -0,0 +1 @@
+rd_("Bf[\"{{{BDAb{BAK`}}{BDAb{BAK`}}}HKf}\",[]]Bf[\"{{{BDAb{CCOl}}{BDAb{CCOl}}}HKf}\",[]]Bf[\"{{{BDAb{CAEd}}{BDAb{CAEd}}}HKf}\",[]]Bf[\"{{{BDAb{BALb}}{BDAb{BALb}}}HKf}\",[]]Bf[\"{{{BDAb{BGBb}}{BDAb{BGBb}}}HKf}\",[]]Bf[\"{{{BDAb{CDB`}}{BDAb{CDB`}}}HKf}\",[]]Bf[\"{{{BDAb{BMFj}}{BDAb{BMFj}}}HKf}\",[]]Bf[\"{{{BDAb{BGBh}}{BDAb{BGBh}}}HKf}\",[]]Bf[\"{{{BDAb{BAMj}}{BDAb{BAMj}}}HKf}\",[]]Bf[\"{{{BDAb{CACj}}{BDAb{CACj}}}HKf}\",[]]Cg[\"{{{BDAb{{CEHb{c}}}}{BDAb{{CEHb{c}}}}}HKfBALl}\",[\"T\"]]Cg[\"{ [...]
\ No newline at end of file
diff --git a/api/search.index/function/ccce77cef075.js b/api/search.index/function/ccce77cef075.js
deleted file mode 100644
index e27f3d796..000000000
--- a/api/search.index/function/ccce77cef075.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("Bf[\"{{{BCKh{BAEl}}{BCKh{BAEl}}}HJd}\",[]]Bf[\"{{{BCKh{CCHb}}{BCKh{CCHb}}}HJd}\",[]]Bf[\"{{{BCKh{C@Ml}}{BCKh{C@Ml}}}HJd}\",[]]Bf[\"{{{BCKh{BAFn}}{BCKh{BAFn}}}HJd}\",[]]Bf[\"{{{BCKh{BFKn}}{BCKh{BFKn}}}HJd}\",[]]Bf[\"{{{BCKh{CCJf}}{BCKh{CCJf}}}HJd}\",[]]Bf[\"{{{BCKh{BLOj}}{BCKh{BLOj}}}HJd}\",[]]Bf[\"{{{BCKh{BFLd}}{BCKh{BFLd}}}HJd}\",[]]Bf[\"{{{BCKh{BAHf}}{BCKh{BAHf}}}HJd}\",[]]Bf[\"{{{BCKh{C@Lb}}{BCKh{C@Lb}}}HJd}\",[]]Cg[\"{{{BCKh{{CE@d{c}}}}{BCKh{{CE@d{c}}}}}HJdBAGh}\",[\"T\"]]Cg[\"{ [...]
\ No newline at end of file
diff --git a/api/search.index/generic_inverted_index/52b9ae2cba1b.js b/api/search.index/generic_inverted_index/52b9ae2cba1b.js
new file mode 100644
index 000000000..c36e3dcc2
--- /dev/null
+++ b/api/search.index/generic_inverted_index/52b9ae2cba1b.js
@@ -0,0 +1 @@
+rb_("REFkADswAAABAACRAQQA6AbFAPgHxQDjEQAALBcEADswAAABAAASAhYAIgQAACoFAAA5BScAYgUAAGQFAgBrBQgAdgUPAIcFAACJBQ8AmgUAAJwFBACiBQcAqwUBAK8FCAC5BS0A6AUDAO0FGQAIBgAACgYIAK0OggABEMUA4BECADswAAABAAAbAxQAQQLFAKEJBACnCSQAzQmbAKgLKQDTC5sA0wwBADAPHwBRDwEAVQ8AAFcPFABtDwEAcA8FAHcPCgCDDxcAnA8RAK8PPgDvDxEA+BsAAKQcAAA7MAAAAQAA2gEVAIYAAgDeAwEA7AMAAO4DAAACBAAAWwQBAL8HAQCmCQAAdAoBAIMMAQAPDQAAJA0EAHYPAADIEAAAChEoADQRnACxFaEAxBYGAM8WTwCnHAAA2BwBADswAAABAADSASQA6AMAAO8DAAAnBAAALgQAAGMFAADNBwAA6gcCAAkJAAByCgEAdgo [...]
\ No newline at end of file
diff --git a/api/search.index/generic_inverted_index/f5020a4a8656.js b/api/search.index/generic_inverted_index/f5020a4a8656.js
deleted file mode 100644
index 06d3fef0e..000000000
--- a/api/search.index/generic_inverted_index/f5020a4a8656.js
+++ /dev/null
@@ -1 +0,0 @@
-rb_("REFkADswAAABAACNAQQA2QbDAOYHwwC3EQAA8hYEADswAAABAAANAhYAGQQAAB8FAAAuBScAVwUAAFkFAgBgBQgAawUPAHwFAAB+BQ8AjwUAAJEFBACXBQcAoAUBAKQFCACuBS0A3QUDAOIFGQD9BQAA/wUGAIgOgQDZD8MAtBECADswAAABAAATAxQAPQLDAIsJBACRCSQAtwmZAI0LKQC4C5kAswwBAAoPHwArDwEALw8AADEPFABHDwEASg8FAFEPCgBdDxcAdg8RAIkPPgDJDw8AtxsAAGIcAAA7MAAAAQAA1gEVAIYAAgDWAwEA5AMAAOYDAAD6AwAAUgQBAK4HAQCQCQAAXAoBAGUMAQDuDAAAAw0EAFAPAACeEAAA4BAoAAoRmgB6FaEAjBYGAJcWTQBlHAAAlhwBADswAAABAADNASQA4AMAAOcDAAAeBAAAJQQAAFgFAAC8BwAA2AcCAPUIAABaCgEAXgo [...]
\ No newline at end of file
diff --git a/api/search.index/name/8bf398e8332d.js b/api/search.index/name/8bf398e8332d.js
new file mode 100644
index 000000000..f27549277
--- /dev/null
+++ b/api/search.index/name/8bf398e8332d.js
@@ -0,0 +1 @@
+rd_("aC0aR00aT000aU0b()bAsbEqbFsbIdbInbOk0bOr00bS3000bV10bV2bV3b[]beq000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bidbio0bop00bor000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bs30btobu8bv1bv2bv3cAnd00cAnycArccBoxcDaycErr0cGcs00cInt0cLz4cMap00cNot00cOrccOrdcOss00cPincSet0cSqlcTag0cUtccV [...]
\ No newline at end of file
diff --git a/api/search.index/name/af60be0ce572.js b/api/search.index/name/af60be0ce572.js
deleted file mode 100644
index 4467c266d..000000000
--- a/api/search.index/name/af60be0ce572.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("aC0aR00aT000aU0b()bAsbEqbFsbIdbInbOk0bOr00bS3000bV10bV2bV3b[]beq000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bidbio0bop00bor0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bs30btobu8bv1bv2bv3cAnd00cAnycArccBoxcDaycErr0cGcs00cInt0cLz4cMap00cNot00cOrccOrdcOss00cPincSet0cSqlcTag0cUtccVec [...]
\ No newline at end of file
diff --git a/api/search.index/normalizedName/08f11ce5252d.js b/api/search.index/normalizedName/08f11ce5252d.js
deleted file mode 100644
index f98df4940..000000000
--- a/api/search.index/normalizedName/08f11ce5252d.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("ac0ar00at000au0b()basbeqbfsbidbinbok0bor00bs3000bv10bv2bv3b[]::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::8bio0bop007777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777766btobu8765cand00canycarccboxcdaycerr0cgcs00cint0clz4cmap00cnot00corccordcoss00cpincset0csqlctag0cutccveccaddcand000000 [...]
\ No newline at end of file
diff --git a/api/search.index/normalizedName/9df63c1a6562.js b/api/search.index/normalizedName/9df63c1a6562.js
new file mode 100644
index 000000000..e6c8c1038
--- /dev/null
+++ b/api/search.index/normalizedName/9df63c1a6562.js
@@ -0,0 +1 @@
+rd_("ac0ar00at000au0b()basbeqbfsbidbinbok0bor00bs3000bv10bv2bv3b[]::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::8bio0bop00777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777766btobu8765cand00canycarccboxcdaycerr0cgcs00cint0clz4cmap00cnot00corccordcoss00cpincset0csqlctag0cutccveccaddcand0000 [...]
\ No newline at end of file
diff --git a/api/search.index/path/4af3ea0f0ce0.js b/api/search.index/path/4af3ea0f0ce0.js
deleted file mode 100644
index 7ed219b64..000000000
--- a/api/search.index/path/4af3ea0f0ce0.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("g[17,\"\"]000f[1,\"\"]Aa[10,\"bnum::cast\"]Eg[5,\"tower_http::follow_redirect::policy::or\",\"tower_http::follow_redirect::policy::or\"]Ce[15,\"iceberg_storage_opendal::OpenDalStorageFactory\"]Bn[15,\"iceberg_storage_opendal::OpenDalStorage\"]4m[2,\"iceberg\"]Bb[2,\"iceberg::io::storage::config\"]Am[2,\"iceberg_storage_opendal\"]7Ei[5,\"tower_http::follow_redirect::policy::and\",\"tower_http::follow_redirect::policy::and\"]A`[10,\"core::any\"]Ao[5,\"alloc::sync\",\"alloc::sync\"]Ba[ [...]
\ No newline at end of file
diff --git a/api/search.index/path/b3da35c1d2d7.js b/api/search.index/path/b3da35c1d2d7.js
new file mode 100644
index 000000000..afc7956fe
--- /dev/null
+++ b/api/search.index/path/b3da35c1d2d7.js
@@ -0,0 +1 @@
+rd_("g[17,\"\"]000f[1,\"\"]Aa[10,\"bnum::cast\"]Eg[5,\"tower_http::follow_redirect::policy::or\",\"tower_http::follow_redirect::policy::or\"]Bn[15,\"iceberg_storage_opendal::OpenDalStorage\"]Ce[15,\"iceberg_storage_opendal::OpenDalStorageFactory\"]4m[2,\"iceberg\"]Bb[2,\"iceberg::io::storage::config\"]Am[2,\"iceberg_storage_opendal\"]7Ei[5,\"tower_http::follow_redirect::policy::and\",\"tower_http::follow_redirect::policy::and\"]A`[10,\"core::any\"]Ao[5,\"alloc::sync\",\"alloc::sync\"]Ba[ [...]
\ No newline at end of file
diff --git a/api/search.index/root.js b/api/search.index/root.js
index 115173249..8d06ccc22 100644
--- a/api/search.index/root.js
+++ b/api/search.index/root.js
@@ -1 +1 @@
-rr_('{"normalizedName":{"I":"NQBAAAAE0RBlUQEUBp8K4AwFAEAAACAIA9UDJAQ0IgQxQAAAYwEIA9UDJAQFAcAAAAL1FwXeGWFlIwADgAYUSLJBsHAb5AB3OGRt9RwAAAA3AbQBzQBPAFUBQAAAIRQGnwrgDAAiBDI2GgAbAFIBQg7cGsQcBQHAAAADzRoA4xdhcwEBADswAAABAADFAAMALgQAAEMEAADmB8MABQHDAAAXlhyXHBL3G/gbZHNFAEIAAAVgFmOuCK8IsAixCOAIAEJ0ZAAARgRWCwDByKAAAAABYwq037rP/6BQAAAbK7AgDjwJqAAAAAEIThwAAPJ/FgAApAAFAFIAAAYNHWT8HAUAVAAABg4dZP8c84MCcHQ1AEQAABYFHQYdZHUcdhznHOgcWwOgYAAAGIxhaXIFAFEAAAYKHWTxHAUAVgAABhMdZAkdI4EDgA4kuZABoJAAABjkZnBzVQBDAAA [...]
\ No newline at end of file
+rr_('{"normalizedName":{"I":"NQBAAAAE+xBlUwEhBrgKAQ0FAEAAACAOA90DLQQ0KwQxQAAAZQEOA90DLQQFAcAAAAIvGAUbGmFlIwADgAYhSXJJsHAcJQB4OGRt9RwAAAA5AbgBzwBQAFUBQAAAISEGuAoBDQArBDI2GgAbAFQBZg4bGwcdBQHAAAADDBsAHRhhcwEBADswAAABAADHAAMANwQAAEwEAAD4B8UABQHDAAAX2BzZHBI4HDkcZHNFAEIAAAWYFmPCCMMIxAjFCPQIAEJ0ZAAATwRWCwDByKAAAAABZT3QskiAm6BQAAAbarAgDmAJvgAAAAEIThwAAPK3FgAApgAFAFIAAAZRHWRAHQUAVAAABlIdZEMd84MCcHQ1AEQAABZJHUodZLccuBwrHSwdWwOgYAAAGMhhaXIFAFEAAAZOHWQ1HQUAVgAABlcdZE0dI4EDgA5IuyABoJAAABkgZnBzVQBDAAA [...]
\ No newline at end of file
diff --git a/api/search.index/type/213f838255d8.js b/api/search.index/type/213f838255d8.js
deleted file mode 100644
index 4f392b4df..000000000
--- a/api/search.index/type/213f838255d8.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("Co[\"AAAAAAAAAAAAAfwbAAAAAAAAAAABpAcAAA==\",\"AAAAAAAAAAAAAfwbAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAfEIAAAB9AgAAA==\",\"\"]No[\"AAAAAAAAAAAAOjAAAAEAAAAAABAAEAAAANcR6xfsF4IYgxjqGOsY2BnZGfoa+xoAGwEbRRtGG0sbTBsDoQcAAFgKAACZDAAAOzAAAAEAACMADQDcAwAAtQwAANgRAQCEFgEATxcBAO0XAwCEGAMA7BgDANoZAwD8GgMAAhsBAEcbAwBNGwEABKIHAACjBwAAWQoAAJoMAAAF3QMAAN4DAACkDAAAtgwAALcMAAA=\",\"\"]Gc[\"AAAAAAAAAAAAAAA6MAAAAQAAAAAAEAAQAAAA2RGEFoUWTxdQF+8X8BeGGIcY7hjvGNwZ3Rn+Gv8aSRtKGwGjBwAAA94DAACkDAAAtwwAAA==\",\"\"]BAk[\"A [...]
\ No newline at end of file
diff --git a/api/search.index/type/f82f9adc554c.js b/api/search.index/type/f82f9adc554c.js
new file mode 100644
index 000000000..3c3af55f0
--- /dev/null
+++ b/api/search.index/type/f82f9adc554c.js
@@ -0,0 +1 @@
+rd_("Co[\"AAAAAAAAAAAAAT0cAAAAAAAAAAABtQcAAA==\",\"AAAAAAAAAAAAAT0cAAA=\"]Bg[\"AAAAAAAAAAAAAAAAAQUJAAABCAkAAA==\",\"\"]No[\"AAAAAAAAAAAAOjAAAAEAAAAAABAAEAAAAAQSJRgmGL4YvxgmGScZFRoWGjkbOhs/G0AbhBuFG4obixsDsgcAAHAKAAC5DAAAOzAAAAEAACMADQDkAwAA1QwAAAUSAQC8FgEAiRcBACcYAwDAGAMAKBkDABcaAwA7GwMAQRsBAIYbAwCMGwEABLMHAAC0BwAAcQoAALoMAAAF5QMAAOYDAADEDAAA1gwAANcMAAA=\",\"\"]Gc[\"AAAAAAAAAAAAAAA6MAAAAQAAAAAAEAAQAAAABhK8Fr0WiReKFykYKhjCGMMYKhkrGRkaGho9Gz4biBuJGwG0BwAAA+YDAADEDAAA1wwAAA==\",\"\"]BAk[\"A [...]
\ No newline at end of file
diff --git a/api/src-files.js b/api/src-files.js
index 61518c6c7..b6cdcccfa 100644
--- a/api/src-files.js
+++ b/api/src-files.js
@@ -1,2 +1,2 @@
-createSrcSidebar('[["iceberg",["",[["arrow",[],["caching_delete_file_loader.rs","delete_file_loader.rs","delete_filter.rs","mod.rs","nan_val_cnt_visitor.rs","partition_value_calculator.rs","reader.rs","record_batch_partition_splitter.rs","record_batch_projector.rs","record_batch_transformer.rs","schema.rs","value.rs"]],["avro",[],["mod.rs","schema.rs"]],["catalog",[["memory",[],["catalog.rs","mod.rs","namespace_state.rs"]]],["metadata_location.rs","mod.rs"]],["expr",[["visitors",[],["bou [...]
-//{"start":19,"fragment_lengths":[2611,42,91,90,46,80,72,67,313,49,55,109,115,42]}
\ No newline at end of file
+createSrcSidebar('[["iceberg",["",[["arrow",[],["caching_delete_file_loader.rs","delete_file_loader.rs","delete_filter.rs","mod.rs","nan_val_cnt_visitor.rs","partition_value_calculator.rs","reader.rs","record_batch_partition_splitter.rs","record_batch_projector.rs","record_batch_transformer.rs","schema.rs","value.rs"]],["avro",[],["mod.rs","schema.rs"]],["catalog",[["memory",[],["catalog.rs","mod.rs","namespace_state.rs"]]],["metadata_location.rs","mod.rs"]],["expr",[["visitors",[],["bou [...]
+//{"start":19,"fragment_lengths":[2611,42,91,90,46,80,72,67,313,49,55,109,130,42]}
\ No newline at end of file
diff --git a/api/src/iceberg_storage_opendal/lib.rs.html b/api/src/iceberg_storage_opendal/lib.rs.html
index c00dc1296..d13356271 100644
--- a/api/src/iceberg_storage_opendal/lib.rs.html
+++ b/api/src/iceberg_storage_opendal/lib.rs.html
@@ -90,683 +90,686 @@
 <a href=#90 id=90 data-nosnippet>90</a>    }
 <a href=#91 id=91 data-nosnippet>91</a>}
 <a href=#92 id=92 data-nosnippet>92</a>
-<a href=#93 id=93 data-nosnippet>93</a><span class="doccomment">/// OpenDAL-based storage factory.
-<a href=#94 id=94 data-nosnippet>94</a>///
-<a href=#95 id=95 data-nosnippet>95</a>/// Maps scheme to the corresponding OpenDalStorage storage variant.
-<a href=#96 id=96 data-nosnippet>96</a>/// Use this factory with `FileIOBuilder::new(factory)` to create FileIO instances.
-<a href=#97 id=97 data-nosnippet>97</a></span><span class="attr">#[derive(Clone, Debug, Serialize, Deserialize)]
-<a href=#98 id=98 data-nosnippet>98</a></span><span class="kw">pub enum </span>OpenDalStorageFactory {
-<a href=#99 id=99 data-nosnippet>99</a>    <span class="doccomment">/// Memory storage factory.
-<a href=#100 id=100 data-nosnippet>100</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
-<a href=#101 id=101 data-nosnippet>101</a>    </span>Memory,
-<a href=#102 id=102 data-nosnippet>102</a>    <span class="doccomment">/// Local filesystem storage factory.
-<a href=#103 id=103 data-nosnippet>103</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
-<a href=#104 id=104 data-nosnippet>104</a>    </span>Fs,
-<a href=#105 id=105 data-nosnippet>105</a>    <span class="doccomment">/// S3 storage factory.
-<a href=#106 id=106 data-nosnippet>106</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
-<a href=#107 id=107 data-nosnippet>107</a>    </span>S3 {
-<a href=#108 id=108 data-nosnippet>108</a>        <span class="doccomment">/// s3 storage could have `s3://` and `s3a://`.
-<a href=#109 id=109 data-nosnippet>109</a>        /// Storing the scheme string here to return the correct path.
-<a href=#110 id=110 data-nosnippet>110</a>        </span>configured_scheme: String,
-<a href=#111 id=111 data-nosnippet>111</a>        <span class="doccomment">/// Custom AWS credential loader.
-<a href=#112 id=112 data-nosnippet>112</a>        </span><span class="attr">#[serde(skip)]
-<a href=#113 id=113 data-nosnippet>113</a>        </span>customized_credential_load: <span class="prelude-ty">Option</span>&lt;s3::CustomAwsCredentialLoader&gt;,
-<a href=#114 id=114 data-nosnippet>114</a>    },
-<a href=#115 id=115 data-nosnippet>115</a>    <span class="doccomment">/// GCS storage factory.
-<a href=#116 id=116 data-nosnippet>116</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
-<a href=#117 id=117 data-nosnippet>117</a>    </span>Gcs,
-<a href=#118 id=118 data-nosnippet>118</a>    <span class="doccomment">/// OSS storage factory.
-<a href=#119 id=119 data-nosnippet>119</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
-<a href=#120 id=120 data-nosnippet>120</a>    </span>Oss,
-<a href=#121 id=121 data-nosnippet>121</a>    <span class="doccomment">/// Azure Data Lake Storage factory.
-<a href=#122 id=122 data-nosnippet>122</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
-<a href=#123 id=123 data-nosnippet>123</a>    </span>Azdls {
-<a href=#124 id=124 data-nosnippet>124</a>        <span class="doccomment">/// The configured Azure storage scheme.
-<a href=#125 id=125 data-nosnippet>125</a>        </span>configured_scheme: AzureStorageScheme,
-<a href=#126 id=126 data-nosnippet>126</a>    },
-<a href=#127 id=127 data-nosnippet>127</a>}
-<a href=#128 id=128 data-nosnippet>128</a>
-<a href=#129 id=129 data-nosnippet>129</a><span class="attr">#[typetag::serde(name = <span class="string">"OpenDalStorageFactory"</span>)]
-<a href=#130 id=130 data-nosnippet>130</a></span><span class="kw">impl </span>StorageFactory <span class="kw">for </span>OpenDalStorageFactory {
-<a href=#131 id=131 data-nosnippet>131</a>    <span class="attr">#[allow(unused_variables)]
-<a href=#132 id=132 data-nosnippet>132</a>    </span><span class="kw">fn </span>build(<span class="kw-2">&amp;</span><span class="self">self</span>, config: <span class="kw-2">&amp;</span>StorageConfig) -&gt; <span class="prelude-ty">Result</span>&lt;Arc&lt;<span class="kw">dyn </span>Storage&gt;&gt; {
-<a href=#133 id=133 data-nosnippet>133</a>        <span class="kw">match </span><span class="self">self </span>{
-<a href=#134 id=134 data-nosnippet>134</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
-<a href=#135 id=135 data-nosnippet>135</a>            </span>OpenDalStorageFactory::Memory =&gt; {
-<a href=#136 id=136 data-nosnippet>136</a>                <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::Memory(memory_config_build()<span class="question-mark">?</span>)))
-<a href=#137 id=137 data-nosnippet>137</a>            }
-<a href=#138 id=138 data-nosnippet>138</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
-<a href=#139 id=139 data-nosnippet>139</a>            </span>OpenDalStorageFactory::Fs =&gt; <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::LocalFs)),
-<a href=#140 id=140 data-nosnippet>140</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
-<a href=#141 id=141 data-nosnippet>141</a>            </span>OpenDalStorageFactory::S3 {
-<a href=#142 id=142 data-nosnippet>142</a>                configured_scheme,
-<a href=#143 id=143 data-nosnippet>143</a>                customized_credential_load,
-<a href=#144 id=144 data-nosnippet>144</a>            } =&gt; <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::S3 {
-<a href=#145 id=145 data-nosnippet>145</a>                configured_scheme: configured_scheme.clone(),
-<a href=#146 id=146 data-nosnippet>146</a>                config: s3_config_parse(config.props().clone())<span class="question-mark">?</span>.into(),
-<a href=#147 id=147 data-nosnippet>147</a>                customized_credential_load: customized_credential_load.clone(),
-<a href=#148 id=148 data-nosnippet>148</a>            })),
-<a href=#149 id=149 data-nosnippet>149</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
-<a href=#150 id=150 data-nosnippet>150</a>            </span>OpenDalStorageFactory::Gcs =&gt; <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::Gcs {
-<a href=#151 id=151 data-nosnippet>151</a>                config: gcs_config_parse(config.props().clone())<span class="question-mark">?</span>.into(),
-<a href=#152 id=152 data-nosnippet>152</a>            })),
-<a href=#153 id=153 data-nosnippet>153</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
-<a href=#154 id=154 data-nosnippet>154</a>            </span>OpenDalStorageFactory::Oss =&gt; <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::Oss {
-<a href=#155 id=155 data-nosnippet>155</a>                config: oss_config_parse(config.props().clone())<span class="question-mark">?</span>.into(),
-<a href=#156 id=156 data-nosnippet>156</a>            })),
-<a href=#157 id=157 data-nosnippet>157</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
-<a href=#158 id=158 data-nosnippet>158</a>            </span>OpenDalStorageFactory::Azdls { configured_scheme } =&gt; {
-<a href=#159 id=159 data-nosnippet>159</a>                <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::Azdls {
-<a href=#160 id=160 data-nosnippet>160</a>                    configured_scheme: configured_scheme.clone(),
-<a href=#161 id=161 data-nosnippet>161</a>                    config: azdls_config_parse(config.props().clone())<span class="question-mark">?</span>.into(),
-<a href=#162 id=162 data-nosnippet>162</a>                }))
-<a href=#163 id=163 data-nosnippet>163</a>            }
-<a href=#164 id=164 data-nosnippet>164</a>            <span class="attr">#[cfg(all(
-<a href=#165 id=165 data-nosnippet>165</a>                not(feature = <span class="string">"opendal-memory"</span>),
-<a href=#166 id=166 data-nosnippet>166</a>                not(feature = <span class="string">"opendal-fs"</span>),
-<a href=#167 id=167 data-nosnippet>167</a>                not(feature = <span class="string">"opendal-s3"</span>),
-<a href=#168 id=168 data-nosnippet>168</a>                not(feature = <span class="string">"opendal-gcs"</span>),
-<a href=#169 id=169 data-nosnippet>169</a>                not(feature = <span class="string">"opendal-oss"</span>),
-<a href=#170 id=170 data-nosnippet>170</a>                not(feature = <span class="string">"opendal-azdls"</span>),
-<a href=#171 id=171 data-nosnippet>171</a>            ))]
-<a href=#172 id=172 data-nosnippet>172</a>            </span><span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(Error::new(
-<a href=#173 id=173 data-nosnippet>173</a>                ErrorKind::FeatureUnsupported,
-<a href=#174 id=174 data-nosnippet>174</a>                <span class="string">"No storage service has been enabled"</span>,
-<a href=#175 id=175 data-nosnippet>175</a>            )),
-<a href=#176 id=176 data-nosnippet>176</a>        }
-<a href=#177 id=177 data-nosnippet>177</a>    }
-<a href=#178 id=178 data-nosnippet>178</a>}
-<a href=#179 id=179 data-nosnippet>179</a>
-<a href=#180 id=180 data-nosnippet>180</a><span class="doccomment">/// Default memory operator for serde deserialization.
-<a href=#181 id=181 data-nosnippet>181</a></span><span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
-<a href=#182 id=182 data-nosnippet>182</a></span><span class="kw">fn </span>default_memory_operator() -&gt; Operator {
-<a href=#183 id=183 data-nosnippet>183</a>    memory_config_build().expect(<span class="string">"Failed to create default memory operator"</span>)
-<a href=#184 id=184 data-nosnippet>184</a>}
-<a href=#185 id=185 data-nosnippet>185</a>
-<a href=#186 id=186 data-nosnippet>186</a><span class="doccomment">/// OpenDAL-based storage implementation.
-<a href=#187 id=187 data-nosnippet>187</a></span><span class="attr">#[derive(Clone, Debug, Serialize, Deserialize)]
-<a href=#188 id=188 data-nosnippet>188</a></span><span class="kw">pub enum </span>OpenDalStorage {
-<a href=#189 id=189 data-nosnippet>189</a>    <span class="doccomment">/// Memory storage variant.
-<a href=#190 id=190 data-nosnippet>190</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
-<a href=#191 id=191 data-nosnippet>191</a>    </span>Memory(<span class="attr">#[serde(skip, default = <span class="string">"self::default_memory_operator"</span>)] </span>Operator),
-<a href=#192 id=192 data-nosnippet>192</a>    <span class="doccomment">/// Local filesystem storage variant.
-<a href=#193 id=193 data-nosnippet>193</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
-<a href=#194 id=194 data-nosnippet>194</a>    </span>LocalFs,
-<a href=#195 id=195 data-nosnippet>195</a>    <span class="doccomment">/// S3 storage variant.
-<a href=#196 id=196 data-nosnippet>196</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
-<a href=#197 id=197 data-nosnippet>197</a>    </span>S3 {
-<a href=#198 id=198 data-nosnippet>198</a>        <span class="doccomment">/// s3 storage could have `s3://` and `s3a://`.
-<a href=#199 id=199 data-nosnippet>199</a>        /// Storing the scheme string here to return the correct path.
-<a href=#200 id=200 data-nosnippet>200</a>        </span>configured_scheme: String,
-<a href=#201 id=201 data-nosnippet>201</a>        <span class="doccomment">/// S3 configuration.
-<a href=#202 id=202 data-nosnippet>202</a>        </span>config: Arc&lt;S3Config&gt;,
-<a href=#203 id=203 data-nosnippet>203</a>        <span class="doccomment">/// Custom AWS credential loader.
-<a href=#204 id=204 data-nosnippet>204</a>        </span><span class="attr">#[serde(skip)]
-<a href=#205 id=205 data-nosnippet>205</a>        </span>customized_credential_load: <span class="prelude-ty">Option</span>&lt;s3::CustomAwsCredentialLoader&gt;,
-<a href=#206 id=206 data-nosnippet>206</a>    },
-<a href=#207 id=207 data-nosnippet>207</a>    <span class="doccomment">/// GCS storage variant.
-<a href=#208 id=208 data-nosnippet>208</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
-<a href=#209 id=209 data-nosnippet>209</a>    </span>Gcs {
-<a href=#210 id=210 data-nosnippet>210</a>        <span class="doccomment">/// GCS configuration.
-<a href=#211 id=211 data-nosnippet>211</a>        </span>config: Arc&lt;GcsConfig&gt;,
-<a href=#212 id=212 data-nosnippet>212</a>    },
-<a href=#213 id=213 data-nosnippet>213</a>    <span class="doccomment">/// OSS storage variant.
-<a href=#214 id=214 data-nosnippet>214</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
-<a href=#215 id=215 data-nosnippet>215</a>    </span>Oss {
-<a href=#216 id=216 data-nosnippet>216</a>        <span class="doccomment">/// OSS configuration.
-<a href=#217 id=217 data-nosnippet>217</a>        </span>config: Arc&lt;OssConfig&gt;,
-<a href=#218 id=218 data-nosnippet>218</a>    },
-<a href=#219 id=219 data-nosnippet>219</a>    <span class="doccomment">/// Azure Data Lake Storage variant.
-<a href=#220 id=220 data-nosnippet>220</a>    /// Expects paths of the form
-<a href=#221 id=221 data-nosnippet>221</a>    /// `abfs[s]://&lt;filesystem&gt;@&lt;account&gt;.dfs.&lt;endpoint-suffix&gt;/&lt;path&gt;` or
-<a href=#222 id=222 data-nosnippet>222</a>    /// `wasb[s]://&lt;container&gt;@&lt;account&gt;.blob.&lt;endpoint-suffix&gt;/&lt;path&gt;`.
-<a href=#223 id=223 data-nosnippet>223</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
-<a href=#224 id=224 data-nosnippet>224</a>    #[allow(private_interfaces)]
-<a href=#225 id=225 data-nosnippet>225</a>    </span>Azdls {
-<a href=#226 id=226 data-nosnippet>226</a>        <span class="doccomment">/// The configured Azure storage scheme.
-<a href=#227 id=227 data-nosnippet>227</a>        /// Because Azdls accepts multiple possible schemes, we store the full
-<a href=#228 id=228 data-nosnippet>228</a>        /// passed scheme here to later validate schemes passed via paths.
-<a href=#229 id=229 data-nosnippet>229</a>        </span>configured_scheme: AzureStorageScheme,
-<a href=#230 id=230 data-nosnippet>230</a>        <span class="doccomment">/// Azure DLS configuration.
-<a href=#231 id=231 data-nosnippet>231</a>        </span>config: Arc&lt;AzdlsConfig&gt;,
-<a href=#232 id=232 data-nosnippet>232</a>    },
-<a href=#233 id=233 data-nosnippet>233</a>}
-<a href=#234 id=234 data-nosnippet>234</a>
-<a href=#235 id=235 data-nosnippet>235</a><span class="kw">impl </span>OpenDalStorage {
-<a href=#236 id=236 data-nosnippet>236</a>    <span class="doccomment">/// Creates operator from path.
-<a href=#237 id=237 data-nosnippet>237</a>    ///
-<a href=#238 id=238 data-nosnippet>238</a>    /// # Arguments
-<a href=#239 id=239 data-nosnippet>239</a>    ///
-<a href=#240 id=240 data-nosnippet>240</a>    /// * path: It should be *absolute* path starting with scheme string used to construct [`FileIO`](iceberg::io::FileIO).
-<a href=#241 id=241 data-nosnippet>241</a>    ///
-<a href=#242 id=242 data-nosnippet>242</a>    /// # Returns
-<a href=#243 id=243 data-nosnippet>243</a>    ///
-<a href=#244 id=244 data-nosnippet>244</a>    /// The return value consists of two parts:
-<a href=#245 id=245 data-nosnippet>245</a>    ///
-<a href=#246 id=246 data-nosnippet>246</a>    /// * An [`opendal::Operator`] instance used to operate on file.
-<a href=#247 id=247 data-nosnippet>247</a>    /// * Relative path to the root uri of [`opendal::Operator`].
-<a href=#248 id=248 data-nosnippet>248</a>    </span><span class="attr">#[allow(unreachable_code, unused_variables)]
-<a href=#249 id=249 data-nosnippet>249</a>    </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>create_operator&lt;<span class="lifetime">'a</span>&gt;(
-<a href=#250 id=250 data-nosnippet>250</a>        <span class="kw-2">&amp;</span><span class="self">self</span>,
-<a href=#251 id=251 data-nosnippet>251</a>        path: <span class="kw-2">&amp;</span><span class="lifetime">'a </span><span class="kw">impl </span>AsRef&lt;str&gt;,
-<a href=#252 id=252 data-nosnippet>252</a>    ) -&gt; <span class="prelude-ty">Result</span>&lt;(Operator, <span class="kw-2">&amp;</span><span class="lifetime">'a </span>str)&gt; {
-<a href=#253 id=253 data-nosnippet>253</a>        <span class="kw">let </span>path = path.as_ref();
-<a href=#254 id=254 data-nosnippet>254</a>        <span class="kw">let </span>(operator, relative_path): (Operator, <span class="kw-2">&amp;</span>str) = <span class="kw">match </span><span class="self">self </span>{
-<a href=#255 id=255 data-nosnippet>255</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
-<a href=#256 id=256 data-nosnippet>256</a>            </span>OpenDalStorage::Memory(op) =&gt; {
-<a href=#257 id=257 data-nosnippet>257</a>                <span class="kw">if let </span><span class="prelude-val">Some</span>(stripped) = path.strip_prefix(<span class="string">"memory:/"</span>) {
-<a href=#258 id=258 data-nosnippet>258</a>                    (op.clone(), stripped)
-<a href=#259 id=259 data-nosnippet>259</a>                } <span class="kw">else </span>{
-<a href=#260 id=260 data-nosnippet>260</a>                    (op.clone(), <span class="kw-2">&amp;</span>path[<span class="number">1</span>..])
-<a href=#261 id=261 data-nosnippet>261</a>                }
-<a href=#262 id=262 data-nosnippet>262</a>            }
-<a href=#263 id=263 data-nosnippet>263</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
-<a href=#264 id=264 data-nosnippet>264</a>            </span>OpenDalStorage::LocalFs =&gt; {
-<a href=#265 id=265 data-nosnippet>265</a>                <span class="kw">let </span>op = fs_config_build()<span class="question-mark">?</span>;
-<a href=#266 id=266 data-nosnippet>266</a>                <span class="kw">if let </span><span class="prelude-val">Some</span>(stripped) = path.strip_prefix(<span class="string">"file:/"</span>) {
-<a href=#267 id=267 data-nosnippet>267</a>                    (op, stripped)
-<a href=#268 id=268 data-nosnippet>268</a>                } <span class="kw">else </span>{
-<a href=#269 id=269 data-nosnippet>269</a>                    (op, <span class="kw-2">&amp;</span>path[<span class="number">1</span>..])
-<a href=#270 id=270 data-nosnippet>270</a>                }
-<a href=#271 id=271 data-nosnippet>271</a>            }
-<a href=#272 id=272 data-nosnippet>272</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
-<a href=#273 id=273 data-nosnippet>273</a>            </span>OpenDalStorage::S3 {
-<a href=#274 id=274 data-nosnippet>274</a>                configured_scheme,
-<a href=#275 id=275 data-nosnippet>275</a>                config,
-<a href=#276 id=276 data-nosnippet>276</a>                customized_credential_load,
-<a href=#277 id=277 data-nosnippet>277</a>            } =&gt; {
-<a href=#278 id=278 data-nosnippet>278</a>                <span class="kw">let </span>op = s3_config_build(config, customized_credential_load, path)<span class="question-mark">?</span>;
-<a href=#279 id=279 data-nosnippet>279</a>                <span class="kw">let </span>op_info = op.info();
-<a href=#280 id=280 data-nosnippet>280</a>
-<a href=#281 id=281 data-nosnippet>281</a>                <span class="comment">// Check prefix of s3 path.
-<a href=#282 id=282 data-nosnippet>282</a>                </span><span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"{}://{}/"</span>, configured_scheme, op_info.name());
-<a href=#283 id=283 data-nosnippet>283</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
-<a href=#284 id=284 data-nosnippet>284</a>                    (op, <span class="kw-2">&amp;</span>path[prefix.len()..])
-<a href=#285 id=285 data-nosnippet>285</a>                } <span class="kw">else </span>{
-<a href=#286 id=286 data-nosnippet>286</a>                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#287 id=287 data-nosnippet>287</a>                        ErrorKind::DataInvalid,
-<a href=#288 id=288 data-nosnippet>288</a>                        <span class="macro">format!</span>(<span class="string">"Invalid s3 url: {path}, should start with {prefix}"</span>),
-<a href=#289 id=289 data-nosnippet>289</a>                    ));
-<a href=#290 id=290 data-nosnippet>290</a>                }
-<a href=#291 id=291 data-nosnippet>291</a>            }
-<a href=#292 id=292 data-nosnippet>292</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
-<a href=#293 id=293 data-nosnippet>293</a>            </span>OpenDalStorage::Gcs { config } =&gt; {
-<a href=#294 id=294 data-nosnippet>294</a>                <span class="kw">let </span>operator = gcs_config_build(config, path)<span class="question-mark">?</span>;
-<a href=#295 id=295 data-nosnippet>295</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"gs://{}/"</span>, operator.info().name());
-<a href=#296 id=296 data-nosnippet>296</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
-<a href=#297 id=297 data-nosnippet>297</a>                    (operator, <span class="kw-2">&amp;</span>path[prefix.len()..])
-<a href=#298 id=298 data-nosnippet>298</a>                } <span class="kw">else </span>{
-<a href=#299 id=299 data-nosnippet>299</a>                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#300 id=300 data-nosnippet>300</a>                        ErrorKind::DataInvalid,
-<a href=#301 id=301 data-nosnippet>301</a>                        <span class="macro">format!</span>(<span class="string">"Invalid gcs url: {path}, should start with {prefix}"</span>),
-<a href=#302 id=302 data-nosnippet>302</a>                    ));
-<a href=#303 id=303 data-nosnippet>303</a>                }
-<a href=#304 id=304 data-nosnippet>304</a>            }
-<a href=#305 id=305 data-nosnippet>305</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
-<a href=#306 id=306 data-nosnippet>306</a>            </span>OpenDalStorage::Oss { config } =&gt; {
-<a href=#307 id=307 data-nosnippet>307</a>                <span class="kw">let </span>op = oss_config_build(config, path)<span class="question-mark">?</span>;
-<a href=#308 id=308 data-nosnippet>308</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"oss://{}/"</span>, op.info().name());
-<a href=#309 id=309 data-nosnippet>309</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
-<a href=#310 id=310 data-nosnippet>310</a>                    (op, <span class="kw-2">&amp;</span>path[prefix.len()..])
-<a href=#311 id=311 data-nosnippet>311</a>                } <span class="kw">else </span>{
-<a href=#312 id=312 data-nosnippet>312</a>                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#313 id=313 data-nosnippet>313</a>                        ErrorKind::DataInvalid,
-<a href=#314 id=314 data-nosnippet>314</a>                        <span class="macro">format!</span>(<span class="string">"Invalid oss url: {path}, should start with {prefix}"</span>),
-<a href=#315 id=315 data-nosnippet>315</a>                    ));
-<a href=#316 id=316 data-nosnippet>316</a>                }
-<a href=#317 id=317 data-nosnippet>317</a>            }
-<a href=#318 id=318 data-nosnippet>318</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
-<a href=#319 id=319 data-nosnippet>319</a>            </span>OpenDalStorage::Azdls {
-<a href=#320 id=320 data-nosnippet>320</a>                configured_scheme,
-<a href=#321 id=321 data-nosnippet>321</a>                config,
-<a href=#322 id=322 data-nosnippet>322</a>            } =&gt; azdls_create_operator(path, config, configured_scheme)<span class="question-mark">?</span>,
-<a href=#323 id=323 data-nosnippet>323</a>            <span class="attr">#[cfg(all(
-<a href=#324 id=324 data-nosnippet>324</a>                not(feature = <span class="string">"opendal-s3"</span>),
-<a href=#325 id=325 data-nosnippet>325</a>                not(feature = <span class="string">"opendal-fs"</span>),
-<a href=#326 id=326 data-nosnippet>326</a>                not(feature = <span class="string">"opendal-gcs"</span>),
-<a href=#327 id=327 data-nosnippet>327</a>                not(feature = <span class="string">"opendal-oss"</span>),
-<a href=#328 id=328 data-nosnippet>328</a>                not(feature = <span class="string">"opendal-azdls"</span>),
-<a href=#329 id=329 data-nosnippet>329</a>            ))]
-<a href=#330 id=330 data-nosnippet>330</a>            </span><span class="kw">_ </span>=&gt; {
-<a href=#331 id=331 data-nosnippet>331</a>                <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#332 id=332 data-nosnippet>332</a>                    ErrorKind::FeatureUnsupported,
-<a href=#333 id=333 data-nosnippet>333</a>                    <span class="string">"No storage service has been enabled"</span>,
-<a href=#334 id=334 data-nosnippet>334</a>                ));
-<a href=#335 id=335 data-nosnippet>335</a>            }
-<a href=#336 id=336 data-nosnippet>336</a>        };
-<a href=#337 id=337 data-nosnippet>337</a>
-<a href=#338 id=338 data-nosnippet>338</a>        <span class="comment">// Transient errors are common for object stores; however there's no
-<a href=#339 id=339 data-nosnippet>339</a>        // harm in retrying temporary failures for other storage backends as well.
-<a href=#340 id=340 data-nosnippet>340</a>        </span><span class="kw">let </span>operator = operator.layer(RetryLayer::new());
-<a href=#341 id=341 data-nosnippet>341</a>        <span class="prelude-val">Ok</span>((operator, relative_path))
-<a href=#342 id=342 data-nosnippet>342</a>    }
-<a href=#343 id=343 data-nosnippet>343</a>
-<a href=#344 id=344 data-nosnippet>344</a>    <span class="doccomment">/// Extracts the relative path from an absolute path without building an operator.
-<a href=#345 id=345 data-nosnippet>345</a>    ///
-<a href=#346 id=346 data-nosnippet>346</a>    /// This is a lightweight alternative to [`create_operator`](Self::create_operator) for cases
-<a href=#347 id=347 data-nosnippet>347</a>    /// where only the relative path is needed (e.g. bulk deletes where the operator is already
-<a href=#348 id=348 data-nosnippet>348</a>    /// available).
-<a href=#349 id=349 data-nosnippet>349</a>    </span><span class="attr">#[allow(unreachable_code, unused_variables)]
-<a href=#350 id=350 data-nosnippet>350</a>    </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>relativize_path&lt;<span class="lifetime">'a</span>&gt;(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span><span class="lifetime">'a </span>str) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="kw-2">&amp;</span><span class="lifetime">'a </span>str&gt; {
-<a href=#351 id=351 data-nosnippet>351</a>        <span class="kw">match </span><span class="self">self </span>{
-<a href=#352 id=352 data-nosnippet>352</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
-<a href=#353 id=353 data-nosnippet>353</a>            </span>OpenDalStorage::Memory(<span class="kw">_</span>) =&gt; <span class="prelude-val">Ok</span>(path.strip_prefix(<span class="string">"memory:/"</span>).unwrap_or(<span class="kw-2">&amp;</span>path[<span class="number">1</span>..])),
-<a href=#354 id=354 data-nosnippet>354</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
-<a href=#355 id=355 data-nosnippet>355</a>            </span>OpenDalStorage::LocalFs =&gt; <span class="prelude-val">Ok</span>(path.strip_prefix(<span class="string">"file:/"</span>).unwrap_or(<span class="kw-2">&amp;</span>path[<span class="number">1</span>..])),
-<a href=#356 id=356 data-nosnippet>356</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
-<a href=#357 id=357 data-nosnippet>357</a>            </span>OpenDalStorage::S3 {
-<a href=#358 id=358 data-nosnippet>358</a>                configured_scheme, ..
-<a href=#359 id=359 data-nosnippet>359</a>            } =&gt; {
-<a href=#360 id=360 data-nosnippet>360</a>                <span class="kw">let </span>url = url::Url::parse(path)<span class="question-mark">?</span>;
-<a href=#361 id=361 data-nosnippet>361</a>                <span class="kw">let </span>bucket = url.host_str().ok_or_else(|| {
-<a href=#362 id=362 data-nosnippet>362</a>                    Error::new(
-<a href=#363 id=363 data-nosnippet>363</a>                        ErrorKind::DataInvalid,
-<a href=#364 id=364 data-nosnippet>364</a>                        <span class="macro">format!</span>(<span class="string">"Invalid s3 url: {path}, missing bucket"</span>),
-<a href=#365 id=365 data-nosnippet>365</a>                    )
-<a href=#366 id=366 data-nosnippet>366</a>                })<span class="question-mark">?</span>;
-<a href=#367 id=367 data-nosnippet>367</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"{}://{}/"</span>, configured_scheme, bucket);
-<a href=#368 id=368 data-nosnippet>368</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
-<a href=#369 id=369 data-nosnippet>369</a>                    <span class="prelude-val">Ok</span>(<span class="kw-2">&amp;</span>path[prefix.len()..])
-<a href=#370 id=370 data-nosnippet>370</a>                } <span class="kw">else </span>{
-<a href=#371 id=371 data-nosnippet>371</a>                    <span class="prelude-val">Err</span>(Error::new(
-<a href=#372 id=372 data-nosnippet>372</a>                        ErrorKind::DataInvalid,
-<a href=#373 id=373 data-nosnippet>373</a>                        <span class="macro">format!</span>(<span class="string">"Invalid s3 url: {path}, should start with {prefix}"</span>),
-<a href=#374 id=374 data-nosnippet>374</a>                    ))
-<a href=#375 id=375 data-nosnippet>375</a>                }
-<a href=#376 id=376 data-nosnippet>376</a>            }
-<a href=#377 id=377 data-nosnippet>377</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
-<a href=#378 id=378 data-nosnippet>378</a>            </span>OpenDalStorage::Gcs { .. } =&gt; {
-<a href=#379 id=379 data-nosnippet>379</a>                <span class="kw">let </span>url = url::Url::parse(path)<span class="question-mark">?</span>;
-<a href=#380 id=380 data-nosnippet>380</a>                <span class="kw">let </span>bucket = url.host_str().ok_or_else(|| {
-<a href=#381 id=381 data-nosnippet>381</a>                    Error::new(
-<a href=#382 id=382 data-nosnippet>382</a>                        ErrorKind::DataInvalid,
-<a href=#383 id=383 data-nosnippet>383</a>                        <span class="macro">format!</span>(<span class="string">"Invalid gcs url: {path}, missing bucket"</span>),
-<a href=#384 id=384 data-nosnippet>384</a>                    )
-<a href=#385 id=385 data-nosnippet>385</a>                })<span class="question-mark">?</span>;
-<a href=#386 id=386 data-nosnippet>386</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"gs://{}/"</span>, bucket);
-<a href=#387 id=387 data-nosnippet>387</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
-<a href=#388 id=388 data-nosnippet>388</a>                    <span class="prelude-val">Ok</span>(<span class="kw-2">&amp;</span>path[prefix.len()..])
-<a href=#389 id=389 data-nosnippet>389</a>                } <span class="kw">else </span>{
-<a href=#390 id=390 data-nosnippet>390</a>                    <span class="prelude-val">Err</span>(Error::new(
-<a href=#391 id=391 data-nosnippet>391</a>                        ErrorKind::DataInvalid,
-<a href=#392 id=392 data-nosnippet>392</a>                        <span class="macro">format!</span>(<span class="string">"Invalid gcs url: {path}, should start with {prefix}"</span>),
-<a href=#393 id=393 data-nosnippet>393</a>                    ))
-<a href=#394 id=394 data-nosnippet>394</a>                }
-<a href=#395 id=395 data-nosnippet>395</a>            }
-<a href=#396 id=396 data-nosnippet>396</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
-<a href=#397 id=397 data-nosnippet>397</a>            </span>OpenDalStorage::Oss { .. } =&gt; {
-<a href=#398 id=398 data-nosnippet>398</a>                <span class="kw">let </span>url = url::Url::parse(path)<span class="question-mark">?</span>;
-<a href=#399 id=399 data-nosnippet>399</a>                <span class="kw">let </span>bucket = url.host_str().ok_or_else(|| {
-<a href=#400 id=400 data-nosnippet>400</a>                    Error::new(
-<a href=#401 id=401 data-nosnippet>401</a>                        ErrorKind::DataInvalid,
-<a href=#402 id=402 data-nosnippet>402</a>                        <span class="macro">format!</span>(<span class="string">"Invalid oss url: {path}, missing bucket"</span>),
-<a href=#403 id=403 data-nosnippet>403</a>                    )
-<a href=#404 id=404 data-nosnippet>404</a>                })<span class="question-mark">?</span>;
-<a href=#405 id=405 data-nosnippet>405</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"oss://{}/"</span>, bucket);
-<a href=#406 id=406 data-nosnippet>406</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
-<a href=#407 id=407 data-nosnippet>407</a>                    <span class="prelude-val">Ok</span>(<span class="kw-2">&amp;</span>path[prefix.len()..])
-<a href=#408 id=408 data-nosnippet>408</a>                } <span class="kw">else </span>{
-<a href=#409 id=409 data-nosnippet>409</a>                    <span class="prelude-val">Err</span>(Error::new(
-<a href=#410 id=410 data-nosnippet>410</a>                        ErrorKind::DataInvalid,
-<a href=#411 id=411 data-nosnippet>411</a>                        <span class="macro">format!</span>(<span class="string">"Invalid oss url: {path}, should start with {prefix}"</span>),
-<a href=#412 id=412 data-nosnippet>412</a>                    ))
-<a href=#413 id=413 data-nosnippet>413</a>                }
-<a href=#414 id=414 data-nosnippet>414</a>            }
-<a href=#415 id=415 data-nosnippet>415</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
-<a href=#416 id=416 data-nosnippet>416</a>            </span>OpenDalStorage::Azdls {
-<a href=#417 id=417 data-nosnippet>417</a>                configured_scheme,
-<a href=#418 id=418 data-nosnippet>418</a>                config,
-<a href=#419 id=419 data-nosnippet>419</a>            } =&gt; {
-<a href=#420 id=420 data-nosnippet>420</a>                <span class="kw">let </span>azure_path = path.parse::&lt;AzureStoragePath&gt;()<span class="question-mark">?</span>;
-<a href=#421 id=421 data-nosnippet>421</a>                match_path_with_config(<span class="kw-2">&amp;</span>azure_path, config, configured_scheme)<span class="question-mark">?</span>;
-<a href=#422 id=422 data-nosnippet>422</a>                <span class="kw">let </span>relative_path_len = azure_path.path.len();
-<a href=#423 id=423 data-nosnippet>423</a>                <span class="prelude-val">Ok</span>(<span class="kw-2">&amp;</span>path[path.len() - relative_path_len..])
-<a href=#424 id=424 data-nosnippet>424</a>            }
-<a href=#425 id=425 data-nosnippet>425</a>            <span class="attr">#[cfg(all(
-<a href=#426 id=426 data-nosnippet>426</a>                not(feature = <span class="string">"opendal-s3"</span>),
-<a href=#427 id=427 data-nosnippet>427</a>                not(feature = <span class="string">"opendal-fs"</span>),
-<a href=#428 id=428 data-nosnippet>428</a>                not(feature = <span class="string">"opendal-gcs"</span>),
-<a href=#429 id=429 data-nosnippet>429</a>                not(feature = <span class="string">"opendal-oss"</span>),
-<a href=#430 id=430 data-nosnippet>430</a>                not(feature = <span class="string">"opendal-azdls"</span>),
-<a href=#431 id=431 data-nosnippet>431</a>            ))]
-<a href=#432 id=432 data-nosnippet>432</a>            </span><span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(Error::new(
-<a href=#433 id=433 data-nosnippet>433</a>                ErrorKind::FeatureUnsupported,
-<a href=#434 id=434 data-nosnippet>434</a>                <span class="string">"No storage service has been enabled"</span>,
-<a href=#435 id=435 data-nosnippet>435</a>            )),
-<a href=#436 id=436 data-nosnippet>436</a>        }
-<a href=#437 id=437 data-nosnippet>437</a>    }
-<a href=#438 id=438 data-nosnippet>438</a>}
-<a href=#439 id=439 data-nosnippet>439</a>
-<a href=#440 id=440 data-nosnippet>440</a><span class="attr">#[typetag::serde(name = <span class="string">"OpenDalStorage"</span>)]
-<a href=#441 id=441 data-nosnippet>441</a>#[async_trait]
-<a href=#442 id=442 data-nosnippet>442</a></span><span class="kw">impl </span>Storage <span class="kw">for </span>OpenDalStorage {
-<a href=#443 id=443 data-nosnippet>443</a>    <span class="kw">async fn </span>exists(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;bool&gt; {
-<a href=#444 id=444 data-nosnippet>444</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
-<a href=#445 id=445 data-nosnippet>445</a>        <span class="prelude-val">Ok</span>(op.exists(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>)
-<a href=#446 id=446 data-nosnippet>446</a>    }
-<a href=#447 id=447 data-nosnippet>447</a>
-<a href=#448 id=448 data-nosnippet>448</a>    <span class="kw">async fn </span>metadata(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;FileMetadata&gt; {
-<a href=#449 id=449 data-nosnippet>449</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
-<a href=#450 id=450 data-nosnippet>450</a>        <span class="kw">let </span>meta = op.stat(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
-<a href=#451 id=451 data-nosnippet>451</a>        <span class="prelude-val">Ok</span>(FileMetadata {
-<a href=#452 id=452 data-nosnippet>452</a>            size: meta.content_length(),
-<a href=#453 id=453 data-nosnippet>453</a>        })
-<a href=#454 id=454 data-nosnippet>454</a>    }
-<a href=#455 id=455 data-nosnippet>455</a>
-<a href=#456 id=456 data-nosnippet>456</a>    <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Bytes&gt; {
-<a href=#457 id=457 data-nosnippet>457</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
-<a href=#458 id=458 data-nosnippet>458</a>        <span class="prelude-val">Ok</span>(op
-<a href=#459 id=459 data-nosnippet>459</a>            .read(relative_path)
-<a href=#460 id=460 data-nosnippet>460</a>            .<span class="kw">await
-<a href=#461 id=461 data-nosnippet>461</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?
-<a href=#462 id=462 data-nosnippet>462</a>            </span>.to_bytes())
-<a href=#463 id=463 data-nosnippet>463</a>    }
-<a href=#464 id=464 data-nosnippet>464</a>
-<a href=#465 id=465 data-nosnippet>465</a>    <span class="kw">async fn </span>reader(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Box&lt;<span class="kw">dyn </span>FileRead&gt;&gt; {
-<a href=#466 id=466 data-nosnippet>466</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
-<a href=#467 id=467 data-nosnippet>467</a>        <span class="prelude-val">Ok</span>(Box::new(OpenDalReader(
-<a href=#468 id=468 data-nosnippet>468</a>            op.reader(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>,
-<a href=#469 id=469 data-nosnippet>469</a>        )))
-<a href=#470 id=470 data-nosnippet>470</a>    }
-<a href=#471 id=471 data-nosnippet>471</a>
-<a href=#472 id=472 data-nosnippet>472</a>    <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-<a href=#473 id=473 data-nosnippet>473</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
-<a href=#474 id=474 data-nosnippet>474</a>        op.write(relative_path, bs)
-<a href=#475 id=475 data-nosnippet>475</a>            .<span class="kw">await
-<a href=#476 id=476 data-nosnippet>476</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
-<a href=#477 id=477 data-nosnippet>477</a>        <span class="prelude-val">Ok</span>(())
-<a href=#478 id=478 data-nosnippet>478</a>    }
-<a href=#479 id=479 data-nosnippet>479</a>
-<a href=#480 id=480 data-nosnippet>480</a>    <span class="kw">async fn </span>writer(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Box&lt;<span class="kw">dyn </span>FileWrite&gt;&gt; {
-<a href=#481 id=481 data-nosnippet>481</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
-<a href=#482 id=482 data-nosnippet>482</a>        <span class="prelude-val">Ok</span>(Box::new(OpenDalWriter(
-<a href=#483 id=483 data-nosnippet>483</a>            op.writer(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>,
-<a href=#484 id=484 data-nosnippet>484</a>        )))
-<a href=#485 id=485 data-nosnippet>485</a>    }
-<a href=#486 id=486 data-nosnippet>486</a>
-<a href=#487 id=487 data-nosnippet>487</a>    <span class="kw">async fn </span>delete(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-<a href=#488 id=488 data-nosnippet>488</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
-<a href=#489 id=489 data-nosnippet>489</a>        <span class="prelude-val">Ok</span>(op.delete(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>)
-<a href=#490 id=490 data-nosnippet>490</a>    }
-<a href=#491 id=491 data-nosnippet>491</a>
-<a href=#492 id=492 data-nosnippet>492</a>    <span class="kw">async fn </span>delete_prefix(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-<a href=#493 id=493 data-nosnippet>493</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
-<a href=#494 id=494 data-nosnippet>494</a>        <span class="kw">let </span>path = <span class="kw">if </span>relative_path.ends_with(<span class="string">'/'</span>) {
-<a href=#495 id=495 data-nosnippet>495</a>            relative_path.to_string()
-<a href=#496 id=496 data-nosnippet>496</a>        } <span class="kw">else </span>{
-<a href=#497 id=497 data-nosnippet>497</a>            <span class="macro">format!</span>(<span class="string">"{relative_path}/"</span>)
-<a href=#498 id=498 data-nosnippet>498</a>        };
-<a href=#499 id=499 data-nosnippet>499</a>        <span class="prelude-val">Ok</span>(op.remove_all(<span class="kw-2">&amp;</span>path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>)
-<a href=#500 id=500 data-nosnippet>500</a>    }
-<a href=#501 id=501 data-nosnippet>501</a>
-<a href=#502 id=502 data-nosnippet>502</a>    <span class="kw">async fn </span>delete_stream(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw-2">mut </span>paths: BoxStream&lt;<span class="lifetime">'static</span>, String&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-<a href=#503 id=503 data-nosnippet>503</a>        <span class="kw">let </span><span class="kw-2">mut </span>deleters: HashMap&lt;String, opendal::Deleter&gt; = HashMap::new();
+<a href=#93 id=93 data-nosnippet>93</a><span class="kw">mod </span>resolving;
+<a href=#94 id=94 data-nosnippet>94</a><span class="kw">pub use </span>resolving::{OpenDalResolvingStorage, OpenDalResolvingStorageFactory};
+<a href=#95 id=95 data-nosnippet>95</a>
+<a href=#96 id=96 data-nosnippet>96</a><span class="doccomment">/// OpenDAL-based storage factory.
+<a href=#97 id=97 data-nosnippet>97</a>///
+<a href=#98 id=98 data-nosnippet>98</a>/// Maps scheme to the corresponding OpenDalStorage storage variant.
+<a href=#99 id=99 data-nosnippet>99</a>/// Use this factory with `FileIOBuilder::new(factory)` to create FileIO instances.
+<a href=#100 id=100 data-nosnippet>100</a></span><span class="attr">#[derive(Clone, Debug, Serialize, Deserialize)]
+<a href=#101 id=101 data-nosnippet>101</a></span><span class="kw">pub enum </span>OpenDalStorageFactory {
+<a href=#102 id=102 data-nosnippet>102</a>    <span class="doccomment">/// Memory storage factory.
+<a href=#103 id=103 data-nosnippet>103</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
+<a href=#104 id=104 data-nosnippet>104</a>    </span>Memory,
+<a href=#105 id=105 data-nosnippet>105</a>    <span class="doccomment">/// Local filesystem storage factory.
+<a href=#106 id=106 data-nosnippet>106</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
+<a href=#107 id=107 data-nosnippet>107</a>    </span>Fs,
+<a href=#108 id=108 data-nosnippet>108</a>    <span class="doccomment">/// S3 storage factory.
+<a href=#109 id=109 data-nosnippet>109</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#110 id=110 data-nosnippet>110</a>    </span>S3 {
+<a href=#111 id=111 data-nosnippet>111</a>        <span class="doccomment">/// s3 storage could have `s3://` and `s3a://`.
+<a href=#112 id=112 data-nosnippet>112</a>        /// Storing the scheme string here to return the correct path.
+<a href=#113 id=113 data-nosnippet>113</a>        </span>configured_scheme: String,
+<a href=#114 id=114 data-nosnippet>114</a>        <span class="doccomment">/// Custom AWS credential loader.
+<a href=#115 id=115 data-nosnippet>115</a>        </span><span class="attr">#[serde(skip)]
+<a href=#116 id=116 data-nosnippet>116</a>        </span>customized_credential_load: <span class="prelude-ty">Option</span>&lt;s3::CustomAwsCredentialLoader&gt;,
+<a href=#117 id=117 data-nosnippet>117</a>    },
+<a href=#118 id=118 data-nosnippet>118</a>    <span class="doccomment">/// GCS storage factory.
+<a href=#119 id=119 data-nosnippet>119</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
+<a href=#120 id=120 data-nosnippet>120</a>    </span>Gcs,
+<a href=#121 id=121 data-nosnippet>121</a>    <span class="doccomment">/// OSS storage factory.
+<a href=#122 id=122 data-nosnippet>122</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
+<a href=#123 id=123 data-nosnippet>123</a>    </span>Oss,
+<a href=#124 id=124 data-nosnippet>124</a>    <span class="doccomment">/// Azure Data Lake Storage factory.
+<a href=#125 id=125 data-nosnippet>125</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
+<a href=#126 id=126 data-nosnippet>126</a>    </span>Azdls {
+<a href=#127 id=127 data-nosnippet>127</a>        <span class="doccomment">/// The configured Azure storage scheme.
+<a href=#128 id=128 data-nosnippet>128</a>        </span>configured_scheme: AzureStorageScheme,
+<a href=#129 id=129 data-nosnippet>129</a>    },
+<a href=#130 id=130 data-nosnippet>130</a>}
+<a href=#131 id=131 data-nosnippet>131</a>
+<a href=#132 id=132 data-nosnippet>132</a><span class="attr">#[typetag::serde(name = <span class="string">"OpenDalStorageFactory"</span>)]
+<a href=#133 id=133 data-nosnippet>133</a></span><span class="kw">impl </span>StorageFactory <span class="kw">for </span>OpenDalStorageFactory {
+<a href=#134 id=134 data-nosnippet>134</a>    <span class="attr">#[allow(unused_variables)]
+<a href=#135 id=135 data-nosnippet>135</a>    </span><span class="kw">fn </span>build(<span class="kw-2">&amp;</span><span class="self">self</span>, config: <span class="kw-2">&amp;</span>StorageConfig) -&gt; <span class="prelude-ty">Result</span>&lt;Arc&lt;<span class="kw">dyn </span>Storage&gt;&gt; {
+<a href=#136 id=136 data-nosnippet>136</a>        <span class="kw">match </span><span class="self">self </span>{
+<a href=#137 id=137 data-nosnippet>137</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
+<a href=#138 id=138 data-nosnippet>138</a>            </span>OpenDalStorageFactory::Memory =&gt; {
+<a href=#139 id=139 data-nosnippet>139</a>                <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::Memory(memory_config_build()<span class="question-mark">?</span>)))
+<a href=#140 id=140 data-nosnippet>140</a>            }
+<a href=#141 id=141 data-nosnippet>141</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
+<a href=#142 id=142 data-nosnippet>142</a>            </span>OpenDalStorageFactory::Fs =&gt; <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::LocalFs)),
+<a href=#143 id=143 data-nosnippet>143</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#144 id=144 data-nosnippet>144</a>            </span>OpenDalStorageFactory::S3 {
+<a href=#145 id=145 data-nosnippet>145</a>                configured_scheme,
+<a href=#146 id=146 data-nosnippet>146</a>                customized_credential_load,
+<a href=#147 id=147 data-nosnippet>147</a>            } =&gt; <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::S3 {
+<a href=#148 id=148 data-nosnippet>148</a>                configured_scheme: configured_scheme.clone(),
+<a href=#149 id=149 data-nosnippet>149</a>                config: s3_config_parse(config.props().clone())<span class="question-mark">?</span>.into(),
+<a href=#150 id=150 data-nosnippet>150</a>                customized_credential_load: customized_credential_load.clone(),
+<a href=#151 id=151 data-nosnippet>151</a>            })),
+<a href=#152 id=152 data-nosnippet>152</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
+<a href=#153 id=153 data-nosnippet>153</a>            </span>OpenDalStorageFactory::Gcs =&gt; <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::Gcs {
+<a href=#154 id=154 data-nosnippet>154</a>                config: gcs_config_parse(config.props().clone())<span class="question-mark">?</span>.into(),
+<a href=#155 id=155 data-nosnippet>155</a>            })),
+<a href=#156 id=156 data-nosnippet>156</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
+<a href=#157 id=157 data-nosnippet>157</a>            </span>OpenDalStorageFactory::Oss =&gt; <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::Oss {
+<a href=#158 id=158 data-nosnippet>158</a>                config: oss_config_parse(config.props().clone())<span class="question-mark">?</span>.into(),
+<a href=#159 id=159 data-nosnippet>159</a>            })),
+<a href=#160 id=160 data-nosnippet>160</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
+<a href=#161 id=161 data-nosnippet>161</a>            </span>OpenDalStorageFactory::Azdls { configured_scheme } =&gt; {
+<a href=#162 id=162 data-nosnippet>162</a>                <span class="prelude-val">Ok</span>(Arc::new(OpenDalStorage::Azdls {
+<a href=#163 id=163 data-nosnippet>163</a>                    configured_scheme: configured_scheme.clone(),
+<a href=#164 id=164 data-nosnippet>164</a>                    config: azdls_config_parse(config.props().clone())<span class="question-mark">?</span>.into(),
+<a href=#165 id=165 data-nosnippet>165</a>                }))
+<a href=#166 id=166 data-nosnippet>166</a>            }
+<a href=#167 id=167 data-nosnippet>167</a>            <span class="attr">#[cfg(all(
+<a href=#168 id=168 data-nosnippet>168</a>                not(feature = <span class="string">"opendal-memory"</span>),
+<a href=#169 id=169 data-nosnippet>169</a>                not(feature = <span class="string">"opendal-fs"</span>),
+<a href=#170 id=170 data-nosnippet>170</a>                not(feature = <span class="string">"opendal-s3"</span>),
+<a href=#171 id=171 data-nosnippet>171</a>                not(feature = <span class="string">"opendal-gcs"</span>),
+<a href=#172 id=172 data-nosnippet>172</a>                not(feature = <span class="string">"opendal-oss"</span>),
+<a href=#173 id=173 data-nosnippet>173</a>                not(feature = <span class="string">"opendal-azdls"</span>),
+<a href=#174 id=174 data-nosnippet>174</a>            ))]
+<a href=#175 id=175 data-nosnippet>175</a>            </span><span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(Error::new(
+<a href=#176 id=176 data-nosnippet>176</a>                ErrorKind::FeatureUnsupported,
+<a href=#177 id=177 data-nosnippet>177</a>                <span class="string">"No storage service has been enabled"</span>,
+<a href=#178 id=178 data-nosnippet>178</a>            )),
+<a href=#179 id=179 data-nosnippet>179</a>        }
+<a href=#180 id=180 data-nosnippet>180</a>    }
+<a href=#181 id=181 data-nosnippet>181</a>}
+<a href=#182 id=182 data-nosnippet>182</a>
+<a href=#183 id=183 data-nosnippet>183</a><span class="doccomment">/// Default memory operator for serde deserialization.
+<a href=#184 id=184 data-nosnippet>184</a></span><span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
+<a href=#185 id=185 data-nosnippet>185</a></span><span class="kw">fn </span>default_memory_operator() -&gt; Operator {
+<a href=#186 id=186 data-nosnippet>186</a>    memory_config_build().expect(<span class="string">"Failed to create default memory operator"</span>)
+<a href=#187 id=187 data-nosnippet>187</a>}
+<a href=#188 id=188 data-nosnippet>188</a>
+<a href=#189 id=189 data-nosnippet>189</a><span class="doccomment">/// OpenDAL-based storage implementation.
+<a href=#190 id=190 data-nosnippet>190</a></span><span class="attr">#[derive(Clone, Debug, Serialize, Deserialize)]
+<a href=#191 id=191 data-nosnippet>191</a></span><span class="kw">pub enum </span>OpenDalStorage {
+<a href=#192 id=192 data-nosnippet>192</a>    <span class="doccomment">/// Memory storage variant.
+<a href=#193 id=193 data-nosnippet>193</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
+<a href=#194 id=194 data-nosnippet>194</a>    </span>Memory(<span class="attr">#[serde(skip, default = <span class="string">"self::default_memory_operator"</span>)] </span>Operator),
+<a href=#195 id=195 data-nosnippet>195</a>    <span class="doccomment">/// Local filesystem storage variant.
+<a href=#196 id=196 data-nosnippet>196</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
+<a href=#197 id=197 data-nosnippet>197</a>    </span>LocalFs,
+<a href=#198 id=198 data-nosnippet>198</a>    <span class="doccomment">/// S3 storage variant.
+<a href=#199 id=199 data-nosnippet>199</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#200 id=200 data-nosnippet>200</a>    </span>S3 {
+<a href=#201 id=201 data-nosnippet>201</a>        <span class="doccomment">/// s3 storage could have `s3://` and `s3a://`.
+<a href=#202 id=202 data-nosnippet>202</a>        /// Storing the scheme string here to return the correct path.
+<a href=#203 id=203 data-nosnippet>203</a>        </span>configured_scheme: String,
+<a href=#204 id=204 data-nosnippet>204</a>        <span class="doccomment">/// S3 configuration.
+<a href=#205 id=205 data-nosnippet>205</a>        </span>config: Arc&lt;S3Config&gt;,
+<a href=#206 id=206 data-nosnippet>206</a>        <span class="doccomment">/// Custom AWS credential loader.
+<a href=#207 id=207 data-nosnippet>207</a>        </span><span class="attr">#[serde(skip)]
+<a href=#208 id=208 data-nosnippet>208</a>        </span>customized_credential_load: <span class="prelude-ty">Option</span>&lt;s3::CustomAwsCredentialLoader&gt;,
+<a href=#209 id=209 data-nosnippet>209</a>    },
+<a href=#210 id=210 data-nosnippet>210</a>    <span class="doccomment">/// GCS storage variant.
+<a href=#211 id=211 data-nosnippet>211</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
+<a href=#212 id=212 data-nosnippet>212</a>    </span>Gcs {
+<a href=#213 id=213 data-nosnippet>213</a>        <span class="doccomment">/// GCS configuration.
+<a href=#214 id=214 data-nosnippet>214</a>        </span>config: Arc&lt;GcsConfig&gt;,
+<a href=#215 id=215 data-nosnippet>215</a>    },
+<a href=#216 id=216 data-nosnippet>216</a>    <span class="doccomment">/// OSS storage variant.
+<a href=#217 id=217 data-nosnippet>217</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
+<a href=#218 id=218 data-nosnippet>218</a>    </span>Oss {
+<a href=#219 id=219 data-nosnippet>219</a>        <span class="doccomment">/// OSS configuration.
+<a href=#220 id=220 data-nosnippet>220</a>        </span>config: Arc&lt;OssConfig&gt;,
+<a href=#221 id=221 data-nosnippet>221</a>    },
+<a href=#222 id=222 data-nosnippet>222</a>    <span class="doccomment">/// Azure Data Lake Storage variant.
+<a href=#223 id=223 data-nosnippet>223</a>    /// Expects paths of the form
+<a href=#224 id=224 data-nosnippet>224</a>    /// `abfs[s]://&lt;filesystem&gt;@&lt;account&gt;.dfs.&lt;endpoint-suffix&gt;/&lt;path&gt;` or
+<a href=#225 id=225 data-nosnippet>225</a>    /// `wasb[s]://&lt;container&gt;@&lt;account&gt;.blob.&lt;endpoint-suffix&gt;/&lt;path&gt;`.
+<a href=#226 id=226 data-nosnippet>226</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
+<a href=#227 id=227 data-nosnippet>227</a>    #[allow(private_interfaces)]
+<a href=#228 id=228 data-nosnippet>228</a>    </span>Azdls {
+<a href=#229 id=229 data-nosnippet>229</a>        <span class="doccomment">/// The configured Azure storage scheme.
+<a href=#230 id=230 data-nosnippet>230</a>        /// Because Azdls accepts multiple possible schemes, we store the full
+<a href=#231 id=231 data-nosnippet>231</a>        /// passed scheme here to later validate schemes passed via paths.
+<a href=#232 id=232 data-nosnippet>232</a>        </span>configured_scheme: AzureStorageScheme,
+<a href=#233 id=233 data-nosnippet>233</a>        <span class="doccomment">/// Azure DLS configuration.
+<a href=#234 id=234 data-nosnippet>234</a>        </span>config: Arc&lt;AzdlsConfig&gt;,
+<a href=#235 id=235 data-nosnippet>235</a>    },
+<a href=#236 id=236 data-nosnippet>236</a>}
+<a href=#237 id=237 data-nosnippet>237</a>
+<a href=#238 id=238 data-nosnippet>238</a><span class="kw">impl </span>OpenDalStorage {
+<a href=#239 id=239 data-nosnippet>239</a>    <span class="doccomment">/// Creates operator from path.
+<a href=#240 id=240 data-nosnippet>240</a>    ///
+<a href=#241 id=241 data-nosnippet>241</a>    /// # Arguments
+<a href=#242 id=242 data-nosnippet>242</a>    ///
+<a href=#243 id=243 data-nosnippet>243</a>    /// * path: It should be *absolute* path starting with scheme string used to construct [`FileIO`](iceberg::io::FileIO).
+<a href=#244 id=244 data-nosnippet>244</a>    ///
+<a href=#245 id=245 data-nosnippet>245</a>    /// # Returns
+<a href=#246 id=246 data-nosnippet>246</a>    ///
+<a href=#247 id=247 data-nosnippet>247</a>    /// The return value consists of two parts:
+<a href=#248 id=248 data-nosnippet>248</a>    ///
+<a href=#249 id=249 data-nosnippet>249</a>    /// * An [`opendal::Operator`] instance used to operate on file.
+<a href=#250 id=250 data-nosnippet>250</a>    /// * Relative path to the root uri of [`opendal::Operator`].
+<a href=#251 id=251 data-nosnippet>251</a>    </span><span class="attr">#[allow(unreachable_code, unused_variables)]
+<a href=#252 id=252 data-nosnippet>252</a>    </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>create_operator&lt;<span class="lifetime">'a</span>&gt;(
+<a href=#253 id=253 data-nosnippet>253</a>        <span class="kw-2">&amp;</span><span class="self">self</span>,
+<a href=#254 id=254 data-nosnippet>254</a>        path: <span class="kw-2">&amp;</span><span class="lifetime">'a </span><span class="kw">impl </span>AsRef&lt;str&gt;,
+<a href=#255 id=255 data-nosnippet>255</a>    ) -&gt; <span class="prelude-ty">Result</span>&lt;(Operator, <span class="kw-2">&amp;</span><span class="lifetime">'a </span>str)&gt; {
+<a href=#256 id=256 data-nosnippet>256</a>        <span class="kw">let </span>path = path.as_ref();
+<a href=#257 id=257 data-nosnippet>257</a>        <span class="kw">let </span>(operator, relative_path): (Operator, <span class="kw-2">&amp;</span>str) = <span class="kw">match </span><span class="self">self </span>{
+<a href=#258 id=258 data-nosnippet>258</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
+<a href=#259 id=259 data-nosnippet>259</a>            </span>OpenDalStorage::Memory(op) =&gt; {
+<a href=#260 id=260 data-nosnippet>260</a>                <span class="kw">if let </span><span class="prelude-val">Some</span>(stripped) = path.strip_prefix(<span class="string">"memory:/"</span>) {
+<a href=#261 id=261 data-nosnippet>261</a>                    (op.clone(), stripped)
+<a href=#262 id=262 data-nosnippet>262</a>                } <span class="kw">else </span>{
+<a href=#263 id=263 data-nosnippet>263</a>                    (op.clone(), <span class="kw-2">&amp;</span>path[<span class="number">1</span>..])
+<a href=#264 id=264 data-nosnippet>264</a>                }
+<a href=#265 id=265 data-nosnippet>265</a>            }
+<a href=#266 id=266 data-nosnippet>266</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
+<a href=#267 id=267 data-nosnippet>267</a>            </span>OpenDalStorage::LocalFs =&gt; {
+<a href=#268 id=268 data-nosnippet>268</a>                <span class="kw">let </span>op = fs_config_build()<span class="question-mark">?</span>;
+<a href=#269 id=269 data-nosnippet>269</a>                <span class="kw">if let </span><span class="prelude-val">Some</span>(stripped) = path.strip_prefix(<span class="string">"file:/"</span>) {
+<a href=#270 id=270 data-nosnippet>270</a>                    (op, stripped)
+<a href=#271 id=271 data-nosnippet>271</a>                } <span class="kw">else </span>{
+<a href=#272 id=272 data-nosnippet>272</a>                    (op, <span class="kw-2">&amp;</span>path[<span class="number">1</span>..])
+<a href=#273 id=273 data-nosnippet>273</a>                }
+<a href=#274 id=274 data-nosnippet>274</a>            }
+<a href=#275 id=275 data-nosnippet>275</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#276 id=276 data-nosnippet>276</a>            </span>OpenDalStorage::S3 {
+<a href=#277 id=277 data-nosnippet>277</a>                configured_scheme,
+<a href=#278 id=278 data-nosnippet>278</a>                config,
+<a href=#279 id=279 data-nosnippet>279</a>                customized_credential_load,
+<a href=#280 id=280 data-nosnippet>280</a>            } =&gt; {
+<a href=#281 id=281 data-nosnippet>281</a>                <span class="kw">let </span>op = s3_config_build(config, customized_credential_load, path)<span class="question-mark">?</span>;
+<a href=#282 id=282 data-nosnippet>282</a>                <span class="kw">let </span>op_info = op.info();
+<a href=#283 id=283 data-nosnippet>283</a>
+<a href=#284 id=284 data-nosnippet>284</a>                <span class="comment">// Check prefix of s3 path.
+<a href=#285 id=285 data-nosnippet>285</a>                </span><span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"{}://{}/"</span>, configured_scheme, op_info.name());
+<a href=#286 id=286 data-nosnippet>286</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
+<a href=#287 id=287 data-nosnippet>287</a>                    (op, <span class="kw-2">&amp;</span>path[prefix.len()..])
+<a href=#288 id=288 data-nosnippet>288</a>                } <span class="kw">else </span>{
+<a href=#289 id=289 data-nosnippet>289</a>                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#290 id=290 data-nosnippet>290</a>                        ErrorKind::DataInvalid,
+<a href=#291 id=291 data-nosnippet>291</a>                        <span class="macro">format!</span>(<span class="string">"Invalid s3 url: {path}, should start with {prefix}"</span>),
+<a href=#292 id=292 data-nosnippet>292</a>                    ));
+<a href=#293 id=293 data-nosnippet>293</a>                }
+<a href=#294 id=294 data-nosnippet>294</a>            }
+<a href=#295 id=295 data-nosnippet>295</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
+<a href=#296 id=296 data-nosnippet>296</a>            </span>OpenDalStorage::Gcs { config } =&gt; {
+<a href=#297 id=297 data-nosnippet>297</a>                <span class="kw">let </span>operator = gcs_config_build(config, path)<span class="question-mark">?</span>;
+<a href=#298 id=298 data-nosnippet>298</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"gs://{}/"</span>, operator.info().name());
+<a href=#299 id=299 data-nosnippet>299</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
+<a href=#300 id=300 data-nosnippet>300</a>                    (operator, <span class="kw-2">&amp;</span>path[prefix.len()..])
+<a href=#301 id=301 data-nosnippet>301</a>                } <span class="kw">else </span>{
+<a href=#302 id=302 data-nosnippet>302</a>                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#303 id=303 data-nosnippet>303</a>                        ErrorKind::DataInvalid,
+<a href=#304 id=304 data-nosnippet>304</a>                        <span class="macro">format!</span>(<span class="string">"Invalid gcs url: {path}, should start with {prefix}"</span>),
+<a href=#305 id=305 data-nosnippet>305</a>                    ));
+<a href=#306 id=306 data-nosnippet>306</a>                }
+<a href=#307 id=307 data-nosnippet>307</a>            }
+<a href=#308 id=308 data-nosnippet>308</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
+<a href=#309 id=309 data-nosnippet>309</a>            </span>OpenDalStorage::Oss { config } =&gt; {
+<a href=#310 id=310 data-nosnippet>310</a>                <span class="kw">let </span>op = oss_config_build(config, path)<span class="question-mark">?</span>;
+<a href=#311 id=311 data-nosnippet>311</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"oss://{}/"</span>, op.info().name());
+<a href=#312 id=312 data-nosnippet>312</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
+<a href=#313 id=313 data-nosnippet>313</a>                    (op, <span class="kw-2">&amp;</span>path[prefix.len()..])
+<a href=#314 id=314 data-nosnippet>314</a>                } <span class="kw">else </span>{
+<a href=#315 id=315 data-nosnippet>315</a>                    <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#316 id=316 data-nosnippet>316</a>                        ErrorKind::DataInvalid,
+<a href=#317 id=317 data-nosnippet>317</a>                        <span class="macro">format!</span>(<span class="string">"Invalid oss url: {path}, should start with {prefix}"</span>),
+<a href=#318 id=318 data-nosnippet>318</a>                    ));
+<a href=#319 id=319 data-nosnippet>319</a>                }
+<a href=#320 id=320 data-nosnippet>320</a>            }
+<a href=#321 id=321 data-nosnippet>321</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
+<a href=#322 id=322 data-nosnippet>322</a>            </span>OpenDalStorage::Azdls {
+<a href=#323 id=323 data-nosnippet>323</a>                configured_scheme,
+<a href=#324 id=324 data-nosnippet>324</a>                config,
+<a href=#325 id=325 data-nosnippet>325</a>            } =&gt; azdls_create_operator(path, config, configured_scheme)<span class="question-mark">?</span>,
+<a href=#326 id=326 data-nosnippet>326</a>            <span class="attr">#[cfg(all(
+<a href=#327 id=327 data-nosnippet>327</a>                not(feature = <span class="string">"opendal-s3"</span>),
+<a href=#328 id=328 data-nosnippet>328</a>                not(feature = <span class="string">"opendal-fs"</span>),
+<a href=#329 id=329 data-nosnippet>329</a>                not(feature = <span class="string">"opendal-gcs"</span>),
+<a href=#330 id=330 data-nosnippet>330</a>                not(feature = <span class="string">"opendal-oss"</span>),
+<a href=#331 id=331 data-nosnippet>331</a>                not(feature = <span class="string">"opendal-azdls"</span>),
+<a href=#332 id=332 data-nosnippet>332</a>            ))]
+<a href=#333 id=333 data-nosnippet>333</a>            </span><span class="kw">_ </span>=&gt; {
+<a href=#334 id=334 data-nosnippet>334</a>                <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#335 id=335 data-nosnippet>335</a>                    ErrorKind::FeatureUnsupported,
+<a href=#336 id=336 data-nosnippet>336</a>                    <span class="string">"No storage service has been enabled"</span>,
+<a href=#337 id=337 data-nosnippet>337</a>                ));
+<a href=#338 id=338 data-nosnippet>338</a>            }
+<a href=#339 id=339 data-nosnippet>339</a>        };
+<a href=#340 id=340 data-nosnippet>340</a>
+<a href=#341 id=341 data-nosnippet>341</a>        <span class="comment">// Transient errors are common for object stores; however there's no
+<a href=#342 id=342 data-nosnippet>342</a>        // harm in retrying temporary failures for other storage backends as well.
+<a href=#343 id=343 data-nosnippet>343</a>        </span><span class="kw">let </span>operator = operator.layer(RetryLayer::new());
+<a href=#344 id=344 data-nosnippet>344</a>        <span class="prelude-val">Ok</span>((operator, relative_path))
+<a href=#345 id=345 data-nosnippet>345</a>    }
+<a href=#346 id=346 data-nosnippet>346</a>
+<a href=#347 id=347 data-nosnippet>347</a>    <span class="doccomment">/// Extracts the relative path from an absolute path without building an operator.
+<a href=#348 id=348 data-nosnippet>348</a>    ///
+<a href=#349 id=349 data-nosnippet>349</a>    /// This is a lightweight alternative to [`create_operator`](Self::create_operator) for cases
+<a href=#350 id=350 data-nosnippet>350</a>    /// where only the relative path is needed (e.g. bulk deletes where the operator is already
+<a href=#351 id=351 data-nosnippet>351</a>    /// available).
+<a href=#352 id=352 data-nosnippet>352</a>    </span><span class="attr">#[allow(unreachable_code, unused_variables)]
+<a href=#353 id=353 data-nosnippet>353</a>    </span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>relativize_path&lt;<span class="lifetime">'a</span>&gt;(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span><span class="lifetime">'a </span>str) -&gt; <span class="prelude-ty">Result</span>&lt;<span class="kw-2">&amp;</span><span class="lifetime">'a </span>str&gt; {
+<a href=#354 id=354 data-nosnippet>354</a>        <span class="kw">match </span><span class="self">self </span>{
+<a href=#355 id=355 data-nosnippet>355</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
+<a href=#356 id=356 data-nosnippet>356</a>            </span>OpenDalStorage::Memory(<span class="kw">_</span>) =&gt; <span class="prelude-val">Ok</span>(path.strip_prefix(<span class="string">"memory:/"</span>).unwrap_or(<span class="kw-2">&amp;</span>path[<span class="number">1</span>..])),
+<a href=#357 id=357 data-nosnippet>357</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
+<a href=#358 id=358 data-nosnippet>358</a>            </span>OpenDalStorage::LocalFs =&gt; <span class="prelude-val">Ok</span>(path.strip_prefix(<span class="string">"file:/"</span>).unwrap_or(<span class="kw-2">&amp;</span>path[<span class="number">1</span>..])),
+<a href=#359 id=359 data-nosnippet>359</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#360 id=360 data-nosnippet>360</a>            </span>OpenDalStorage::S3 {
+<a href=#361 id=361 data-nosnippet>361</a>                configured_scheme, ..
+<a href=#362 id=362 data-nosnippet>362</a>            } =&gt; {
+<a href=#363 id=363 data-nosnippet>363</a>                <span class="kw">let </span>url = url::Url::parse(path)<span class="question-mark">?</span>;
+<a href=#364 id=364 data-nosnippet>364</a>                <span class="kw">let </span>bucket = url.host_str().ok_or_else(|| {
+<a href=#365 id=365 data-nosnippet>365</a>                    Error::new(
+<a href=#366 id=366 data-nosnippet>366</a>                        ErrorKind::DataInvalid,
+<a href=#367 id=367 data-nosnippet>367</a>                        <span class="macro">format!</span>(<span class="string">"Invalid s3 url: {path}, missing bucket"</span>),
+<a href=#368 id=368 data-nosnippet>368</a>                    )
+<a href=#369 id=369 data-nosnippet>369</a>                })<span class="question-mark">?</span>;
+<a href=#370 id=370 data-nosnippet>370</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"{}://{}/"</span>, configured_scheme, bucket);
+<a href=#371 id=371 data-nosnippet>371</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
+<a href=#372 id=372 data-nosnippet>372</a>                    <span class="prelude-val">Ok</span>(<span class="kw-2">&amp;</span>path[prefix.len()..])
+<a href=#373 id=373 data-nosnippet>373</a>                } <span class="kw">else </span>{
+<a href=#374 id=374 data-nosnippet>374</a>                    <span class="prelude-val">Err</span>(Error::new(
+<a href=#375 id=375 data-nosnippet>375</a>                        ErrorKind::DataInvalid,
+<a href=#376 id=376 data-nosnippet>376</a>                        <span class="macro">format!</span>(<span class="string">"Invalid s3 url: {path}, should start with {prefix}"</span>),
+<a href=#377 id=377 data-nosnippet>377</a>                    ))
+<a href=#378 id=378 data-nosnippet>378</a>                }
+<a href=#379 id=379 data-nosnippet>379</a>            }
+<a href=#380 id=380 data-nosnippet>380</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
+<a href=#381 id=381 data-nosnippet>381</a>            </span>OpenDalStorage::Gcs { .. } =&gt; {
+<a href=#382 id=382 data-nosnippet>382</a>                <span class="kw">let </span>url = url::Url::parse(path)<span class="question-mark">?</span>;
+<a href=#383 id=383 data-nosnippet>383</a>                <span class="kw">let </span>bucket = url.host_str().ok_or_else(|| {
+<a href=#384 id=384 data-nosnippet>384</a>                    Error::new(
+<a href=#385 id=385 data-nosnippet>385</a>                        ErrorKind::DataInvalid,
+<a href=#386 id=386 data-nosnippet>386</a>                        <span class="macro">format!</span>(<span class="string">"Invalid gcs url: {path}, missing bucket"</span>),
+<a href=#387 id=387 data-nosnippet>387</a>                    )
+<a href=#388 id=388 data-nosnippet>388</a>                })<span class="question-mark">?</span>;
+<a href=#389 id=389 data-nosnippet>389</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"gs://{}/"</span>, bucket);
+<a href=#390 id=390 data-nosnippet>390</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
+<a href=#391 id=391 data-nosnippet>391</a>                    <span class="prelude-val">Ok</span>(<span class="kw-2">&amp;</span>path[prefix.len()..])
+<a href=#392 id=392 data-nosnippet>392</a>                } <span class="kw">else </span>{
+<a href=#393 id=393 data-nosnippet>393</a>                    <span class="prelude-val">Err</span>(Error::new(
+<a href=#394 id=394 data-nosnippet>394</a>                        ErrorKind::DataInvalid,
+<a href=#395 id=395 data-nosnippet>395</a>                        <span class="macro">format!</span>(<span class="string">"Invalid gcs url: {path}, should start with {prefix}"</span>),
+<a href=#396 id=396 data-nosnippet>396</a>                    ))
+<a href=#397 id=397 data-nosnippet>397</a>                }
+<a href=#398 id=398 data-nosnippet>398</a>            }
+<a href=#399 id=399 data-nosnippet>399</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
+<a href=#400 id=400 data-nosnippet>400</a>            </span>OpenDalStorage::Oss { .. } =&gt; {
+<a href=#401 id=401 data-nosnippet>401</a>                <span class="kw">let </span>url = url::Url::parse(path)<span class="question-mark">?</span>;
+<a href=#402 id=402 data-nosnippet>402</a>                <span class="kw">let </span>bucket = url.host_str().ok_or_else(|| {
+<a href=#403 id=403 data-nosnippet>403</a>                    Error::new(
+<a href=#404 id=404 data-nosnippet>404</a>                        ErrorKind::DataInvalid,
+<a href=#405 id=405 data-nosnippet>405</a>                        <span class="macro">format!</span>(<span class="string">"Invalid oss url: {path}, missing bucket"</span>),
+<a href=#406 id=406 data-nosnippet>406</a>                    )
+<a href=#407 id=407 data-nosnippet>407</a>                })<span class="question-mark">?</span>;
+<a href=#408 id=408 data-nosnippet>408</a>                <span class="kw">let </span>prefix = <span class="macro">format!</span>(<span class="string">"oss://{}/"</span>, bucket);
+<a href=#409 id=409 data-nosnippet>409</a>                <span class="kw">if </span>path.starts_with(<span class="kw-2">&amp;</span>prefix) {
+<a href=#410 id=410 data-nosnippet>410</a>                    <span class="prelude-val">Ok</span>(<span class="kw-2">&amp;</span>path[prefix.len()..])
+<a href=#411 id=411 data-nosnippet>411</a>                } <span class="kw">else </span>{
+<a href=#412 id=412 data-nosnippet>412</a>                    <span class="prelude-val">Err</span>(Error::new(
+<a href=#413 id=413 data-nosnippet>413</a>                        ErrorKind::DataInvalid,
+<a href=#414 id=414 data-nosnippet>414</a>                        <span class="macro">format!</span>(<span class="string">"Invalid oss url: {path}, should start with {prefix}"</span>),
+<a href=#415 id=415 data-nosnippet>415</a>                    ))
+<a href=#416 id=416 data-nosnippet>416</a>                }
+<a href=#417 id=417 data-nosnippet>417</a>            }
+<a href=#418 id=418 data-nosnippet>418</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
+<a href=#419 id=419 data-nosnippet>419</a>            </span>OpenDalStorage::Azdls {
+<a href=#420 id=420 data-nosnippet>420</a>                configured_scheme,
+<a href=#421 id=421 data-nosnippet>421</a>                config,
+<a href=#422 id=422 data-nosnippet>422</a>            } =&gt; {
+<a href=#423 id=423 data-nosnippet>423</a>                <span class="kw">let </span>azure_path = path.parse::&lt;AzureStoragePath&gt;()<span class="question-mark">?</span>;
+<a href=#424 id=424 data-nosnippet>424</a>                match_path_with_config(<span class="kw-2">&amp;</span>azure_path, config, configured_scheme)<span class="question-mark">?</span>;
+<a href=#425 id=425 data-nosnippet>425</a>                <span class="kw">let </span>relative_path_len = azure_path.path.len();
+<a href=#426 id=426 data-nosnippet>426</a>                <span class="prelude-val">Ok</span>(<span class="kw-2">&amp;</span>path[path.len() - relative_path_len..])
+<a href=#427 id=427 data-nosnippet>427</a>            }
+<a href=#428 id=428 data-nosnippet>428</a>            <span class="attr">#[cfg(all(
+<a href=#429 id=429 data-nosnippet>429</a>                not(feature = <span class="string">"opendal-s3"</span>),
+<a href=#430 id=430 data-nosnippet>430</a>                not(feature = <span class="string">"opendal-fs"</span>),
+<a href=#431 id=431 data-nosnippet>431</a>                not(feature = <span class="string">"opendal-gcs"</span>),
+<a href=#432 id=432 data-nosnippet>432</a>                not(feature = <span class="string">"opendal-oss"</span>),
+<a href=#433 id=433 data-nosnippet>433</a>                not(feature = <span class="string">"opendal-azdls"</span>),
+<a href=#434 id=434 data-nosnippet>434</a>            ))]
+<a href=#435 id=435 data-nosnippet>435</a>            </span><span class="kw">_ </span>=&gt; <span class="prelude-val">Err</span>(Error::new(
+<a href=#436 id=436 data-nosnippet>436</a>                ErrorKind::FeatureUnsupported,
+<a href=#437 id=437 data-nosnippet>437</a>                <span class="string">"No storage service has been enabled"</span>,
+<a href=#438 id=438 data-nosnippet>438</a>            )),
+<a href=#439 id=439 data-nosnippet>439</a>        }
+<a href=#440 id=440 data-nosnippet>440</a>    }
+<a href=#441 id=441 data-nosnippet>441</a>}
+<a href=#442 id=442 data-nosnippet>442</a>
+<a href=#443 id=443 data-nosnippet>443</a><span class="attr">#[typetag::serde(name = <span class="string">"OpenDalStorage"</span>)]
+<a href=#444 id=444 data-nosnippet>444</a>#[async_trait]
+<a href=#445 id=445 data-nosnippet>445</a></span><span class="kw">impl </span>Storage <span class="kw">for </span>OpenDalStorage {
+<a href=#446 id=446 data-nosnippet>446</a>    <span class="kw">async fn </span>exists(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;bool&gt; {
+<a href=#447 id=447 data-nosnippet>447</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#448 id=448 data-nosnippet>448</a>        <span class="prelude-val">Ok</span>(op.exists(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>)
+<a href=#449 id=449 data-nosnippet>449</a>    }
+<a href=#450 id=450 data-nosnippet>450</a>
+<a href=#451 id=451 data-nosnippet>451</a>    <span class="kw">async fn </span>metadata(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;FileMetadata&gt; {
+<a href=#452 id=452 data-nosnippet>452</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#453 id=453 data-nosnippet>453</a>        <span class="kw">let </span>meta = op.stat(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
+<a href=#454 id=454 data-nosnippet>454</a>        <span class="prelude-val">Ok</span>(FileMetadata {
+<a href=#455 id=455 data-nosnippet>455</a>            size: meta.content_length(),
+<a href=#456 id=456 data-nosnippet>456</a>        })
+<a href=#457 id=457 data-nosnippet>457</a>    }
+<a href=#458 id=458 data-nosnippet>458</a>
+<a href=#459 id=459 data-nosnippet>459</a>    <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Bytes&gt; {
+<a href=#460 id=460 data-nosnippet>460</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#461 id=461 data-nosnippet>461</a>        <span class="prelude-val">Ok</span>(op
+<a href=#462 id=462 data-nosnippet>462</a>            .read(relative_path)
+<a href=#463 id=463 data-nosnippet>463</a>            .<span class="kw">await
+<a href=#464 id=464 data-nosnippet>464</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?
+<a href=#465 id=465 data-nosnippet>465</a>            </span>.to_bytes())
+<a href=#466 id=466 data-nosnippet>466</a>    }
+<a href=#467 id=467 data-nosnippet>467</a>
+<a href=#468 id=468 data-nosnippet>468</a>    <span class="kw">async fn </span>reader(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Box&lt;<span class="kw">dyn </span>FileRead&gt;&gt; {
+<a href=#469 id=469 data-nosnippet>469</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#470 id=470 data-nosnippet>470</a>        <span class="prelude-val">Ok</span>(Box::new(OpenDalReader(
+<a href=#471 id=471 data-nosnippet>471</a>            op.reader(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>,
+<a href=#472 id=472 data-nosnippet>472</a>        )))
+<a href=#473 id=473 data-nosnippet>473</a>    }
+<a href=#474 id=474 data-nosnippet>474</a>
+<a href=#475 id=475 data-nosnippet>475</a>    <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#476 id=476 data-nosnippet>476</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#477 id=477 data-nosnippet>477</a>        op.write(relative_path, bs)
+<a href=#478 id=478 data-nosnippet>478</a>            .<span class="kw">await
+<a href=#479 id=479 data-nosnippet>479</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
+<a href=#480 id=480 data-nosnippet>480</a>        <span class="prelude-val">Ok</span>(())
+<a href=#481 id=481 data-nosnippet>481</a>    }
+<a href=#482 id=482 data-nosnippet>482</a>
+<a href=#483 id=483 data-nosnippet>483</a>    <span class="kw">async fn </span>writer(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Box&lt;<span class="kw">dyn </span>FileWrite&gt;&gt; {
+<a href=#484 id=484 data-nosnippet>484</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#485 id=485 data-nosnippet>485</a>        <span class="prelude-val">Ok</span>(Box::new(OpenDalWriter(
+<a href=#486 id=486 data-nosnippet>486</a>            op.writer(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>,
+<a href=#487 id=487 data-nosnippet>487</a>        )))
+<a href=#488 id=488 data-nosnippet>488</a>    }
+<a href=#489 id=489 data-nosnippet>489</a>
+<a href=#490 id=490 data-nosnippet>490</a>    <span class="kw">async fn </span>delete(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#491 id=491 data-nosnippet>491</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#492 id=492 data-nosnippet>492</a>        <span class="prelude-val">Ok</span>(op.delete(relative_path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>)
+<a href=#493 id=493 data-nosnippet>493</a>    }
+<a href=#494 id=494 data-nosnippet>494</a>
+<a href=#495 id=495 data-nosnippet>495</a>    <span class="kw">async fn </span>delete_prefix(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#496 id=496 data-nosnippet>496</a>        <span class="kw">let </span>(op, relative_path) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#497 id=497 data-nosnippet>497</a>        <span class="kw">let </span>path = <span class="kw">if </span>relative_path.ends_with(<span class="string">'/'</span>) {
+<a href=#498 id=498 data-nosnippet>498</a>            relative_path.to_string()
+<a href=#499 id=499 data-nosnippet>499</a>        } <span class="kw">else </span>{
+<a href=#500 id=500 data-nosnippet>500</a>            <span class="macro">format!</span>(<span class="string">"{relative_path}/"</span>)
+<a href=#501 id=501 data-nosnippet>501</a>        };
+<a href=#502 id=502 data-nosnippet>502</a>        <span class="prelude-val">Ok</span>(op.remove_all(<span class="kw-2">&amp;</span>path).<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>)
+<a href=#503 id=503 data-nosnippet>503</a>    }
 <a href=#504 id=504 data-nosnippet>504</a>
-<a href=#505 id=505 data-nosnippet>505</a>        <span class="kw">while let </span><span class="prelude-val">Some</span>(path) = paths.next().<span class="kw">await </span>{
-<a href=#506 id=506 data-nosnippet>506</a>            <span class="kw">let </span>bucket = url::Url::parse(<span class="kw-2">&amp;</span>path)
-<a href=#507 id=507 data-nosnippet>507</a>                .ok()
-<a href=#508 id=508 data-nosnippet>508</a>                .and_then(|u| u.host_str().map(|s| s.to_string()))
-<a href=#509 id=509 data-nosnippet>509</a>                .unwrap_or_default();
-<a href=#510 id=510 data-nosnippet>510</a>
-<a href=#511 id=511 data-nosnippet>511</a>            <span class="kw">let </span>(relative_path, deleter) = <span class="kw">match </span>deleters.entry(bucket) {
-<a href=#512 id=512 data-nosnippet>512</a>                Entry::Occupied(entry) =&gt; {
-<a href=#513 id=513 data-nosnippet>513</a>                    (<span class="self">self</span>.relativize_path(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>.to_string(), entry.into_mut())
-<a href=#514 id=514 data-nosnippet>514</a>                }
-<a href=#515 id=515 data-nosnippet>515</a>                Entry::Vacant(entry) =&gt; {
-<a href=#516 id=516 data-nosnippet>516</a>                    <span class="kw">let </span>(op, rel) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
-<a href=#517 id=517 data-nosnippet>517</a>                    <span class="kw">let </span>rel = rel.to_string();
-<a href=#518 id=518 data-nosnippet>518</a>                    <span class="kw">let </span>deleter = op.deleter().<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
-<a href=#519 id=519 data-nosnippet>519</a>                    (rel, entry.insert(deleter))
-<a href=#520 id=520 data-nosnippet>520</a>                }
-<a href=#521 id=521 data-nosnippet>521</a>            };
-<a href=#522 id=522 data-nosnippet>522</a>
-<a href=#523 id=523 data-nosnippet>523</a>            deleter
-<a href=#524 id=524 data-nosnippet>524</a>                .delete(relative_path)
-<a href=#525 id=525 data-nosnippet>525</a>                .<span class="kw">await
-<a href=#526 id=526 data-nosnippet>526</a>                </span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
-<a href=#527 id=527 data-nosnippet>527</a>        }
-<a href=#528 id=528 data-nosnippet>528</a>
-<a href=#529 id=529 data-nosnippet>529</a>        <span class="kw">for </span>(<span class="kw">_</span>, <span class="kw-2">mut </span>deleter) <span class="kw">in </span>deleters {
-<a href=#530 id=530 data-nosnippet>530</a>            deleter.close().<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
-<a href=#531 id=531 data-nosnippet>531</a>        }
-<a href=#532 id=532 data-nosnippet>532</a>
-<a href=#533 id=533 data-nosnippet>533</a>        <span class="prelude-val">Ok</span>(())
-<a href=#534 id=534 data-nosnippet>534</a>    }
+<a href=#505 id=505 data-nosnippet>505</a>    <span class="kw">async fn </span>delete_stream(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw-2">mut </span>paths: BoxStream&lt;<span class="lifetime">'static</span>, String&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#506 id=506 data-nosnippet>506</a>        <span class="kw">let </span><span class="kw-2">mut </span>deleters: HashMap&lt;String, opendal::Deleter&gt; = HashMap::new();
+<a href=#507 id=507 data-nosnippet>507</a>
+<a href=#508 id=508 data-nosnippet>508</a>        <span class="kw">while let </span><span class="prelude-val">Some</span>(path) = paths.next().<span class="kw">await </span>{
+<a href=#509 id=509 data-nosnippet>509</a>            <span class="kw">let </span>bucket = url::Url::parse(<span class="kw-2">&amp;</span>path)
+<a href=#510 id=510 data-nosnippet>510</a>                .ok()
+<a href=#511 id=511 data-nosnippet>511</a>                .and_then(|u| u.host_str().map(|s| s.to_string()))
+<a href=#512 id=512 data-nosnippet>512</a>                .unwrap_or_default();
+<a href=#513 id=513 data-nosnippet>513</a>
+<a href=#514 id=514 data-nosnippet>514</a>            <span class="kw">let </span>(relative_path, deleter) = <span class="kw">match </span>deleters.entry(bucket) {
+<a href=#515 id=515 data-nosnippet>515</a>                Entry::Occupied(entry) =&gt; {
+<a href=#516 id=516 data-nosnippet>516</a>                    (<span class="self">self</span>.relativize_path(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>.to_string(), entry.into_mut())
+<a href=#517 id=517 data-nosnippet>517</a>                }
+<a href=#518 id=518 data-nosnippet>518</a>                Entry::Vacant(entry) =&gt; {
+<a href=#519 id=519 data-nosnippet>519</a>                    <span class="kw">let </span>(op, rel) = <span class="self">self</span>.create_operator(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#520 id=520 data-nosnippet>520</a>                    <span class="kw">let </span>rel = rel.to_string();
+<a href=#521 id=521 data-nosnippet>521</a>                    <span class="kw">let </span>deleter = op.deleter().<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
+<a href=#522 id=522 data-nosnippet>522</a>                    (rel, entry.insert(deleter))
+<a href=#523 id=523 data-nosnippet>523</a>                }
+<a href=#524 id=524 data-nosnippet>524</a>            };
+<a href=#525 id=525 data-nosnippet>525</a>
+<a href=#526 id=526 data-nosnippet>526</a>            deleter
+<a href=#527 id=527 data-nosnippet>527</a>                .delete(relative_path)
+<a href=#528 id=528 data-nosnippet>528</a>                .<span class="kw">await
+<a href=#529 id=529 data-nosnippet>529</a>                </span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
+<a href=#530 id=530 data-nosnippet>530</a>        }
+<a href=#531 id=531 data-nosnippet>531</a>
+<a href=#532 id=532 data-nosnippet>532</a>        <span class="kw">for </span>(<span class="kw">_</span>, <span class="kw-2">mut </span>deleter) <span class="kw">in </span>deleters {
+<a href=#533 id=533 data-nosnippet>533</a>            deleter.close().<span class="kw">await</span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
+<a href=#534 id=534 data-nosnippet>534</a>        }
 <a href=#535 id=535 data-nosnippet>535</a>
-<a href=#536 id=536 data-nosnippet>536</a>    <span class="attr">#[allow(unreachable_code, unused_variables)]
-<a href=#537 id=537 data-nosnippet>537</a>    </span><span class="kw">fn </span>new_input(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;InputFile&gt; {
-<a href=#538 id=538 data-nosnippet>538</a>        <span class="prelude-val">Ok</span>(InputFile::new(Arc::new(<span class="self">self</span>.clone()), path.to_string()))
-<a href=#539 id=539 data-nosnippet>539</a>    }
-<a href=#540 id=540 data-nosnippet>540</a>
-<a href=#541 id=541 data-nosnippet>541</a>    <span class="attr">#[allow(unreachable_code, unused_variables)]
-<a href=#542 id=542 data-nosnippet>542</a>    </span><span class="kw">fn </span>new_output(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;OutputFile&gt; {
-<a href=#543 id=543 data-nosnippet>543</a>        <span class="prelude-val">Ok</span>(OutputFile::new(Arc::new(<span class="self">self</span>.clone()), path.to_string()))
-<a href=#544 id=544 data-nosnippet>544</a>    }
-<a href=#545 id=545 data-nosnippet>545</a>}
-<a href=#546 id=546 data-nosnippet>546</a>
-<a href=#547 id=547 data-nosnippet>547</a><span class="comment">// Newtype wrappers for opendal types to satisfy orphan rules.
-<a href=#548 id=548 data-nosnippet>548</a>// We can't implement iceberg's FileRead/FileWrite traits directly on opendal's
-<a href=#549 id=549 data-nosnippet>549</a>// Reader/Writer since neither trait nor type is defined in this crate.
-<a href=#550 id=550 data-nosnippet>550</a>
-<a href=#551 id=551 data-nosnippet>551</a></span><span class="doccomment">/// Wrapper around `opendal::Reader` that implements `FileRead`.
-<a href=#552 id=552 data-nosnippet>552</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct </span>OpenDalReader(<span class="kw">pub</span>(<span class="kw">crate</span>) opendal::Reader);
+<a href=#536 id=536 data-nosnippet>536</a>        <span class="prelude-val">Ok</span>(())
+<a href=#537 id=537 data-nosnippet>537</a>    }
+<a href=#538 id=538 data-nosnippet>538</a>
+<a href=#539 id=539 data-nosnippet>539</a>    <span class="attr">#[allow(unreachable_code, unused_variables)]
+<a href=#540 id=540 data-nosnippet>540</a>    </span><span class="kw">fn </span>new_input(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;InputFile&gt; {
+<a href=#541 id=541 data-nosnippet>541</a>        <span class="prelude-val">Ok</span>(InputFile::new(Arc::new(<span class="self">self</span>.clone()), path.to_string()))
+<a href=#542 id=542 data-nosnippet>542</a>    }
+<a href=#543 id=543 data-nosnippet>543</a>
+<a href=#544 id=544 data-nosnippet>544</a>    <span class="attr">#[allow(unreachable_code, unused_variables)]
+<a href=#545 id=545 data-nosnippet>545</a>    </span><span class="kw">fn </span>new_output(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;OutputFile&gt; {
+<a href=#546 id=546 data-nosnippet>546</a>        <span class="prelude-val">Ok</span>(OutputFile::new(Arc::new(<span class="self">self</span>.clone()), path.to_string()))
+<a href=#547 id=547 data-nosnippet>547</a>    }
+<a href=#548 id=548 data-nosnippet>548</a>}
+<a href=#549 id=549 data-nosnippet>549</a>
+<a href=#550 id=550 data-nosnippet>550</a><span class="comment">// Newtype wrappers for opendal types to satisfy orphan rules.
+<a href=#551 id=551 data-nosnippet>551</a>// We can't implement iceberg's FileRead/FileWrite traits directly on opendal's
+<a href=#552 id=552 data-nosnippet>552</a>// Reader/Writer since neither trait nor type is defined in this crate.
 <a href=#553 id=553 data-nosnippet>553</a>
-<a href=#554 id=554 data-nosnippet>554</a><span class="attr">#[async_trait]
-<a href=#555 id=555 data-nosnippet>555</a></span><span class="kw">impl </span>FileRead <span class="kw">for </span>OpenDalReader {
-<a href=#556 id=556 data-nosnippet>556</a>    <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, range: std::ops::Range&lt;u64&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;Bytes&gt; {
-<a href=#557 id=557 data-nosnippet>557</a>        <span class="prelude-val">Ok</span>(opendal::Reader::read(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="number">0</span>, range)
-<a href=#558 id=558 data-nosnippet>558</a>            .<span class="kw">await
-<a href=#559 id=559 data-nosnippet>559</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?
-<a href=#560 id=560 data-nosnippet>560</a>            </span>.to_bytes())
-<a href=#561 id=561 data-nosnippet>561</a>    }
-<a href=#562 id=562 data-nosnippet>562</a>}
-<a href=#563 id=563 data-nosnippet>563</a>
-<a href=#564 id=564 data-nosnippet>564</a><span class="doccomment">/// Wrapper around `opendal::Writer` that implements `FileWrite`.
-<a href=#565 id=565 data-nosnippet>565</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct </span>OpenDalWriter(<span class="kw">pub</span>(<span class="kw">crate</span>) opendal::Writer);
+<a href=#554 id=554 data-nosnippet>554</a></span><span class="doccomment">/// Wrapper around `opendal::Reader` that implements `FileRead`.
+<a href=#555 id=555 data-nosnippet>555</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct </span>OpenDalReader(<span class="kw">pub</span>(<span class="kw">crate</span>) opendal::Reader);
+<a href=#556 id=556 data-nosnippet>556</a>
+<a href=#557 id=557 data-nosnippet>557</a><span class="attr">#[async_trait]
+<a href=#558 id=558 data-nosnippet>558</a></span><span class="kw">impl </span>FileRead <span class="kw">for </span>OpenDalReader {
+<a href=#559 id=559 data-nosnippet>559</a>    <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, range: std::ops::Range&lt;u64&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;Bytes&gt; {
+<a href=#560 id=560 data-nosnippet>560</a>        <span class="prelude-val">Ok</span>(opendal::Reader::read(<span class="kw-2">&amp;</span><span class="self">self</span>.<span class="number">0</span>, range)
+<a href=#561 id=561 data-nosnippet>561</a>            .<span class="kw">await
+<a href=#562 id=562 data-nosnippet>562</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?
+<a href=#563 id=563 data-nosnippet>563</a>            </span>.to_bytes())
+<a href=#564 id=564 data-nosnippet>564</a>    }
+<a href=#565 id=565 data-nosnippet>565</a>}
 <a href=#566 id=566 data-nosnippet>566</a>
-<a href=#567 id=567 data-nosnippet>567</a><span class="attr">#[async_trait]
-<a href=#568 id=568 data-nosnippet>568</a></span><span class="kw">impl </span>FileWrite <span class="kw">for </span>OpenDalWriter {
-<a href=#569 id=569 data-nosnippet>569</a>    <span class="kw">async fn </span>write(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-<a href=#570 id=570 data-nosnippet>570</a>        <span class="prelude-val">Ok</span>(opendal::Writer::write(<span class="kw-2">&amp;mut </span><span class="self">self</span>.<span class="number">0</span>, bs)
-<a href=#571 id=571 data-nosnippet>571</a>            .<span class="kw">await
-<a href=#572 id=572 data-nosnippet>572</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?</span>)
-<a href=#573 id=573 data-nosnippet>573</a>    }
-<a href=#574 id=574 data-nosnippet>574</a>
-<a href=#575 id=575 data-nosnippet>575</a>    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
-<a href=#576 id=576 data-nosnippet>576</a>        <span class="kw">let _ </span>= opendal::Writer::close(<span class="kw-2">&amp;mut </span><span class="self">self</span>.<span class="number">0</span>)
-<a href=#577 id=577 data-nosnippet>577</a>            .<span class="kw">await
-<a href=#578 id=578 data-nosnippet>578</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
-<a href=#579 id=579 data-nosnippet>579</a>        <span class="prelude-val">Ok</span>(())
-<a href=#580 id=580 data-nosnippet>580</a>    }
-<a href=#581 id=581 data-nosnippet>581</a>}
-<a href=#582 id=582 data-nosnippet>582</a>
-<a href=#583 id=583 data-nosnippet>583</a><span class="attr">#[cfg(test)]
-<a href=#584 id=584 data-nosnippet>584</a></span><span class="kw">mod </span>tests {
-<a href=#585 id=585 data-nosnippet>585</a>    <span class="kw">use super</span>::<span class="kw-2">*</span>;
-<a href=#586 id=586 data-nosnippet>586</a>
-<a href=#587 id=587 data-nosnippet>587</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
-<a href=#588 id=588 data-nosnippet>588</a>    #[test]
-<a href=#589 id=589 data-nosnippet>589</a>    </span><span class="kw">fn </span>test_default_memory_operator() {
-<a href=#590 id=590 data-nosnippet>590</a>        <span class="kw">let </span>op = default_memory_operator();
-<a href=#591 id=591 data-nosnippet>591</a>        <span class="macro">assert_eq!</span>(op.info().scheme().to_string(), <span class="string">"memory"</span>);
-<a href=#592 id=592 data-nosnippet>592</a>    }
-<a href=#593 id=593 data-nosnippet>593</a>
-<a href=#594 id=594 data-nosnippet>594</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
-<a href=#595 id=595 data-nosnippet>595</a>    #[test]
-<a href=#596 id=596 data-nosnippet>596</a>    </span><span class="kw">fn </span>test_relativize_path_memory() {
-<a href=#597 id=597 data-nosnippet>597</a>        <span class="kw">let </span>storage = OpenDalStorage::Memory(default_memory_operator());
-<a href=#598 id=598 data-nosnippet>598</a>
-<a href=#599 id=599 data-nosnippet>599</a>        <span class="macro">assert_eq!</span>(
-<a href=#600 id=600 data-nosnippet>600</a>            storage.relativize_path(<span class="string">"memory:/path/to/file"</span>).unwrap(),
-<a href=#601 id=601 data-nosnippet>601</a>            <span class="string">"path/to/file"
-<a href=#602 id=602 data-nosnippet>602</a>        </span>);
-<a href=#603 id=603 data-nosnippet>603</a>        <span class="comment">// Without the scheme prefix, falls back to stripping the leading slash
-<a href=#604 id=604 data-nosnippet>604</a>        </span><span class="macro">assert_eq!</span>(
-<a href=#605 id=605 data-nosnippet>605</a>            storage.relativize_path(<span class="string">"/path/to/file"</span>).unwrap(),
-<a href=#606 id=606 data-nosnippet>606</a>            <span class="string">"path/to/file"
-<a href=#607 id=607 data-nosnippet>607</a>        </span>);
-<a href=#608 id=608 data-nosnippet>608</a>    }
-<a href=#609 id=609 data-nosnippet>609</a>
-<a href=#610 id=610 data-nosnippet>610</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
-<a href=#611 id=611 data-nosnippet>611</a>    #[test]
-<a href=#612 id=612 data-nosnippet>612</a>    </span><span class="kw">fn </span>test_relativize_path_fs() {
-<a href=#613 id=613 data-nosnippet>613</a>        <span class="kw">let </span>storage = OpenDalStorage::LocalFs;
-<a href=#614 id=614 data-nosnippet>614</a>
-<a href=#615 id=615 data-nosnippet>615</a>        <span class="macro">assert_eq!</span>(
-<a href=#616 id=616 data-nosnippet>616</a>            storage
-<a href=#617 id=617 data-nosnippet>617</a>                .relativize_path(<span class="string">"file:/tmp/data/file.parquet"</span>)
-<a href=#618 id=618 data-nosnippet>618</a>                .unwrap(),
-<a href=#619 id=619 data-nosnippet>619</a>            <span class="string">"tmp/data/file.parquet"
-<a href=#620 id=620 data-nosnippet>620</a>        </span>);
-<a href=#621 id=621 data-nosnippet>621</a>        <span class="macro">assert_eq!</span>(
-<a href=#622 id=622 data-nosnippet>622</a>            storage.relativize_path(<span class="string">"/tmp/data/file.parquet"</span>).unwrap(),
-<a href=#623 id=623 data-nosnippet>623</a>            <span class="string">"tmp/data/file.parquet"
-<a href=#624 id=624 data-nosnippet>624</a>        </span>);
-<a href=#625 id=625 data-nosnippet>625</a>    }
-<a href=#626 id=626 data-nosnippet>626</a>
-<a href=#627 id=627 data-nosnippet>627</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
-<a href=#628 id=628 data-nosnippet>628</a>    #[test]
-<a href=#629 id=629 data-nosnippet>629</a>    </span><span class="kw">fn </span>test_relativize_path_s3() {
-<a href=#630 id=630 data-nosnippet>630</a>        <span class="kw">let </span>storage = OpenDalStorage::S3 {
-<a href=#631 id=631 data-nosnippet>631</a>            configured_scheme: <span class="string">"s3"</span>.to_string(),
-<a href=#632 id=632 data-nosnippet>632</a>            config: Arc::new(S3Config::default()),
-<a href=#633 id=633 data-nosnippet>633</a>            customized_credential_load: <span class="prelude-val">None</span>,
-<a href=#634 id=634 data-nosnippet>634</a>        };
-<a href=#635 id=635 data-nosnippet>635</a>
-<a href=#636 id=636 data-nosnippet>636</a>        <span class="macro">assert_eq!</span>(
-<a href=#637 id=637 data-nosnippet>637</a>            storage
-<a href=#638 id=638 data-nosnippet>638</a>                .relativize_path(<span class="string">"s3://my-bucket/path/to/file.parquet"</span>)
-<a href=#639 id=639 data-nosnippet>639</a>                .unwrap(),
-<a href=#640 id=640 data-nosnippet>640</a>            <span class="string">"path/to/file.parquet"
-<a href=#641 id=641 data-nosnippet>641</a>        </span>);
-<a href=#642 id=642 data-nosnippet>642</a>
-<a href=#643 id=643 data-nosnippet>643</a>        <span class="comment">// s3a scheme
-<a href=#644 id=644 data-nosnippet>644</a>        </span><span class="kw">let </span>storage_s3a = OpenDalStorage::S3 {
-<a href=#645 id=645 data-nosnippet>645</a>            configured_scheme: <span class="string">"s3a"</span>.to_string(),
-<a href=#646 id=646 data-nosnippet>646</a>            config: Arc::new(S3Config::default()),
-<a href=#647 id=647 data-nosnippet>647</a>            customized_credential_load: <span class="prelude-val">None</span>,
-<a href=#648 id=648 data-nosnippet>648</a>        };
-<a href=#649 id=649 data-nosnippet>649</a>        <span class="macro">assert_eq!</span>(
-<a href=#650 id=650 data-nosnippet>650</a>            storage_s3a
-<a href=#651 id=651 data-nosnippet>651</a>                .relativize_path(<span class="string">"s3a://my-bucket/path/to/file.parquet"</span>)
-<a href=#652 id=652 data-nosnippet>652</a>                .unwrap(),
-<a href=#653 id=653 data-nosnippet>653</a>            <span class="string">"path/to/file.parquet"
-<a href=#654 id=654 data-nosnippet>654</a>        </span>);
-<a href=#655 id=655 data-nosnippet>655</a>    }
-<a href=#656 id=656 data-nosnippet>656</a>
-<a href=#657 id=657 data-nosnippet>657</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
-<a href=#658 id=658 data-nosnippet>658</a>    #[test]
-<a href=#659 id=659 data-nosnippet>659</a>    </span><span class="kw">fn </span>test_relativize_path_s3_scheme_mismatch() {
-<a href=#660 id=660 data-nosnippet>660</a>        <span class="kw">let </span>storage = OpenDalStorage::S3 {
-<a href=#661 id=661 data-nosnippet>661</a>            configured_scheme: <span class="string">"s3"</span>.to_string(),
-<a href=#662 id=662 data-nosnippet>662</a>            config: Arc::new(S3Config::default()),
-<a href=#663 id=663 data-nosnippet>663</a>            customized_credential_load: <span class="prelude-val">None</span>,
-<a href=#664 id=664 data-nosnippet>664</a>        };
-<a href=#665 id=665 data-nosnippet>665</a>
-<a href=#666 id=666 data-nosnippet>666</a>        <span class="comment">// Scheme mismatch should error
-<a href=#667 id=667 data-nosnippet>667</a>        </span><span class="macro">assert!</span>(
-<a href=#668 id=668 data-nosnippet>668</a>            storage
-<a href=#669 id=669 data-nosnippet>669</a>                .relativize_path(<span class="string">"s3a://my-bucket/path/to/file.parquet"</span>)
-<a href=#670 id=670 data-nosnippet>670</a>                .is_err()
-<a href=#671 id=671 data-nosnippet>671</a>        );
-<a href=#672 id=672 data-nosnippet>672</a>    }
-<a href=#673 id=673 data-nosnippet>673</a>
-<a href=#674 id=674 data-nosnippet>674</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
-<a href=#675 id=675 data-nosnippet>675</a>    #[test]
-<a href=#676 id=676 data-nosnippet>676</a>    </span><span class="kw">fn </span>test_relativize_path_gcs() {
-<a href=#677 id=677 data-nosnippet>677</a>        <span class="kw">let </span>storage = OpenDalStorage::Gcs {
-<a href=#678 id=678 data-nosnippet>678</a>            config: Arc::new(GcsConfig::default()),
-<a href=#679 id=679 data-nosnippet>679</a>        };
-<a href=#680 id=680 data-nosnippet>680</a>
-<a href=#681 id=681 data-nosnippet>681</a>        <span class="macro">assert_eq!</span>(
-<a href=#682 id=682 data-nosnippet>682</a>            storage
-<a href=#683 id=683 data-nosnippet>683</a>                .relativize_path(<span class="string">"gs://my-bucket/path/to/file.parquet"</span>)
-<a href=#684 id=684 data-nosnippet>684</a>                .unwrap(),
-<a href=#685 id=685 data-nosnippet>685</a>            <span class="string">"path/to/file.parquet"
-<a href=#686 id=686 data-nosnippet>686</a>        </span>);
-<a href=#687 id=687 data-nosnippet>687</a>    }
-<a href=#688 id=688 data-nosnippet>688</a>
-<a href=#689 id=689 data-nosnippet>689</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
-<a href=#690 id=690 data-nosnippet>690</a>    #[test]
-<a href=#691 id=691 data-nosnippet>691</a>    </span><span class="kw">fn </span>test_relativize_path_gcs_invalid_scheme() {
-<a href=#692 id=692 data-nosnippet>692</a>        <span class="kw">let </span>storage = OpenDalStorage::Gcs {
-<a href=#693 id=693 data-nosnippet>693</a>            config: Arc::new(GcsConfig::default()),
-<a href=#694 id=694 data-nosnippet>694</a>        };
-<a href=#695 id=695 data-nosnippet>695</a>
-<a href=#696 id=696 data-nosnippet>696</a>        <span class="macro">assert!</span>(
-<a href=#697 id=697 data-nosnippet>697</a>            storage
-<a href=#698 id=698 data-nosnippet>698</a>                .relativize_path(<span class="string">"s3://my-bucket/path/to/file.parquet"</span>)
-<a href=#699 id=699 data-nosnippet>699</a>                .is_err()
-<a href=#700 id=700 data-nosnippet>700</a>        );
-<a href=#701 id=701 data-nosnippet>701</a>    }
-<a href=#702 id=702 data-nosnippet>702</a>
-<a href=#703 id=703 data-nosnippet>703</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
-<a href=#704 id=704 data-nosnippet>704</a>    #[test]
-<a href=#705 id=705 data-nosnippet>705</a>    </span><span class="kw">fn </span>test_relativize_path_oss() {
-<a href=#706 id=706 data-nosnippet>706</a>        <span class="kw">let </span>storage = OpenDalStorage::Oss {
-<a href=#707 id=707 data-nosnippet>707</a>            config: Arc::new(OssConfig::default()),
-<a href=#708 id=708 data-nosnippet>708</a>        };
-<a href=#709 id=709 data-nosnippet>709</a>
-<a href=#710 id=710 data-nosnippet>710</a>        <span class="macro">assert_eq!</span>(
-<a href=#711 id=711 data-nosnippet>711</a>            storage
-<a href=#712 id=712 data-nosnippet>712</a>                .relativize_path(<span class="string">"oss://my-bucket/path/to/file.parquet"</span>)
-<a href=#713 id=713 data-nosnippet>713</a>                .unwrap(),
-<a href=#714 id=714 data-nosnippet>714</a>            <span class="string">"path/to/file.parquet"
-<a href=#715 id=715 data-nosnippet>715</a>        </span>);
-<a href=#716 id=716 data-nosnippet>716</a>    }
-<a href=#717 id=717 data-nosnippet>717</a>
-<a href=#718 id=718 data-nosnippet>718</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
-<a href=#719 id=719 data-nosnippet>719</a>    #[test]
-<a href=#720 id=720 data-nosnippet>720</a>    </span><span class="kw">fn </span>test_relativize_path_oss_invalid_scheme() {
-<a href=#721 id=721 data-nosnippet>721</a>        <span class="kw">let </span>storage = OpenDalStorage::Oss {
-<a href=#722 id=722 data-nosnippet>722</a>            config: Arc::new(OssConfig::default()),
-<a href=#723 id=723 data-nosnippet>723</a>        };
-<a href=#724 id=724 data-nosnippet>724</a>
-<a href=#725 id=725 data-nosnippet>725</a>        <span class="macro">assert!</span>(
-<a href=#726 id=726 data-nosnippet>726</a>            storage
-<a href=#727 id=727 data-nosnippet>727</a>                .relativize_path(<span class="string">"s3://my-bucket/path/to/file.parquet"</span>)
-<a href=#728 id=728 data-nosnippet>728</a>                .is_err()
-<a href=#729 id=729 data-nosnippet>729</a>        );
-<a href=#730 id=730 data-nosnippet>730</a>    }
-<a href=#731 id=731 data-nosnippet>731</a>
-<a href=#732 id=732 data-nosnippet>732</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
-<a href=#733 id=733 data-nosnippet>733</a>    #[test]
-<a href=#734 id=734 data-nosnippet>734</a>    </span><span class="kw">fn </span>test_relativize_path_azdls() {
-<a href=#735 id=735 data-nosnippet>735</a>        <span class="kw">let </span>storage = OpenDalStorage::Azdls {
-<a href=#736 id=736 data-nosnippet>736</a>            configured_scheme: AzureStorageScheme::Abfss,
-<a href=#737 id=737 data-nosnippet>737</a>            config: Arc::new(AzdlsConfig {
-<a href=#738 id=738 data-nosnippet>738</a>                account_name: <span class="prelude-val">Some</span>(<span class="string">"myaccount"</span>.to_string()),
-<a href=#739 id=739 data-nosnippet>739</a>                endpoint: <span class="prelude-val">Some</span>(<span class="string">"https://myaccount.dfs.core.windows.net"</span>.to_string()),
-<a href=#740 id=740 data-nosnippet>740</a>                ..Default::default()
-<a href=#741 id=741 data-nosnippet>741</a>            }),
-<a href=#742 id=742 data-nosnippet>742</a>        };
-<a href=#743 id=743 data-nosnippet>743</a>
-<a href=#744 id=744 data-nosnippet>744</a>        <span class="macro">assert_eq!</span>(
-<a href=#745 id=745 data-nosnippet>745</a>            storage
-<a href=#746 id=746 data-nosnippet>746</a>                .relativize_path(<span class="string">"abfss://myfs@myaccount.dfs.core.windows.net/path/to/file.parquet"</span>)
-<a href=#747 id=747 data-nosnippet>747</a>                .unwrap(),
-<a href=#748 id=748 data-nosnippet>748</a>            <span class="string">"/path/to/file.parquet"
-<a href=#749 id=749 data-nosnippet>749</a>        </span>);
-<a href=#750 id=750 data-nosnippet>750</a>    }
-<a href=#751 id=751 data-nosnippet>751</a>
-<a href=#752 id=752 data-nosnippet>752</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
-<a href=#753 id=753 data-nosnippet>753</a>    #[test]
-<a href=#754 id=754 data-nosnippet>754</a>    </span><span class="kw">fn </span>test_relativize_path_azdls_scheme_mismatch() {
-<a href=#755 id=755 data-nosnippet>755</a>        <span class="kw">let </span>storage = OpenDalStorage::Azdls {
-<a href=#756 id=756 data-nosnippet>756</a>            configured_scheme: AzureStorageScheme::Abfss,
-<a href=#757 id=757 data-nosnippet>757</a>            config: Arc::new(AzdlsConfig {
-<a href=#758 id=758 data-nosnippet>758</a>                account_name: <span class="prelude-val">Some</span>(<span class="string">"myaccount"</span>.to_string()),
-<a href=#759 id=759 data-nosnippet>759</a>                endpoint: <span class="prelude-val">Some</span>(<span class="string">"https://myaccount.dfs.core.windows.net"</span>.to_string()),
-<a href=#760 id=760 data-nosnippet>760</a>                ..Default::default()
-<a href=#761 id=761 data-nosnippet>761</a>            }),
-<a href=#762 id=762 data-nosnippet>762</a>        };
-<a href=#763 id=763 data-nosnippet>763</a>
-<a href=#764 id=764 data-nosnippet>764</a>        <span class="comment">// wasbs scheme doesn't match configured abfss
-<a href=#765 id=765 data-nosnippet>765</a>        </span><span class="macro">assert!</span>(
-<a href=#766 id=766 data-nosnippet>766</a>            storage
-<a href=#767 id=767 data-nosnippet>767</a>                .relativize_path(<span class="string">"wasbs://myfs@myaccount.dfs.core.windows.net/path/to/file.parquet"</span>)
-<a href=#768 id=768 data-nosnippet>768</a>                .is_err()
-<a href=#769 id=769 data-nosnippet>769</a>        );
-<a href=#770 id=770 data-nosnippet>770</a>    }
-<a href=#771 id=771 data-nosnippet>771</a>}
+<a href=#567 id=567 data-nosnippet>567</a><span class="doccomment">/// Wrapper around `opendal::Writer` that implements `FileWrite`.
+<a href=#568 id=568 data-nosnippet>568</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">struct </span>OpenDalWriter(<span class="kw">pub</span>(<span class="kw">crate</span>) opendal::Writer);
+<a href=#569 id=569 data-nosnippet>569</a>
+<a href=#570 id=570 data-nosnippet>570</a><span class="attr">#[async_trait]
+<a href=#571 id=571 data-nosnippet>571</a></span><span class="kw">impl </span>FileWrite <span class="kw">for </span>OpenDalWriter {
+<a href=#572 id=572 data-nosnippet>572</a>    <span class="kw">async fn </span>write(<span class="kw-2">&amp;mut </span><span class="self">self</span>, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#573 id=573 data-nosnippet>573</a>        <span class="prelude-val">Ok</span>(opendal::Writer::write(<span class="kw-2">&amp;mut </span><span class="self">self</span>.<span class="number">0</span>, bs)
+<a href=#574 id=574 data-nosnippet>574</a>            .<span class="kw">await
+<a href=#575 id=575 data-nosnippet>575</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?</span>)
+<a href=#576 id=576 data-nosnippet>576</a>    }
+<a href=#577 id=577 data-nosnippet>577</a>
+<a href=#578 id=578 data-nosnippet>578</a>    <span class="kw">async fn </span>close(<span class="kw-2">&amp;mut </span><span class="self">self</span>) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#579 id=579 data-nosnippet>579</a>        <span class="kw">let _ </span>= opendal::Writer::close(<span class="kw-2">&amp;mut </span><span class="self">self</span>.<span class="number">0</span>)
+<a href=#580 id=580 data-nosnippet>580</a>            .<span class="kw">await
+<a href=#581 id=581 data-nosnippet>581</a>            </span>.map_err(from_opendal_error)<span class="question-mark">?</span>;
+<a href=#582 id=582 data-nosnippet>582</a>        <span class="prelude-val">Ok</span>(())
+<a href=#583 id=583 data-nosnippet>583</a>    }
+<a href=#584 id=584 data-nosnippet>584</a>}
+<a href=#585 id=585 data-nosnippet>585</a>
+<a href=#586 id=586 data-nosnippet>586</a><span class="attr">#[cfg(test)]
+<a href=#587 id=587 data-nosnippet>587</a></span><span class="kw">mod </span>tests {
+<a href=#588 id=588 data-nosnippet>588</a>    <span class="kw">use super</span>::<span class="kw-2">*</span>;
+<a href=#589 id=589 data-nosnippet>589</a>
+<a href=#590 id=590 data-nosnippet>590</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
+<a href=#591 id=591 data-nosnippet>591</a>    #[test]
+<a href=#592 id=592 data-nosnippet>592</a>    </span><span class="kw">fn </span>test_default_memory_operator() {
+<a href=#593 id=593 data-nosnippet>593</a>        <span class="kw">let </span>op = default_memory_operator();
+<a href=#594 id=594 data-nosnippet>594</a>        <span class="macro">assert_eq!</span>(op.info().scheme().to_string(), <span class="string">"memory"</span>);
+<a href=#595 id=595 data-nosnippet>595</a>    }
+<a href=#596 id=596 data-nosnippet>596</a>
+<a href=#597 id=597 data-nosnippet>597</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
+<a href=#598 id=598 data-nosnippet>598</a>    #[test]
+<a href=#599 id=599 data-nosnippet>599</a>    </span><span class="kw">fn </span>test_relativize_path_memory() {
+<a href=#600 id=600 data-nosnippet>600</a>        <span class="kw">let </span>storage = OpenDalStorage::Memory(default_memory_operator());
+<a href=#601 id=601 data-nosnippet>601</a>
+<a href=#602 id=602 data-nosnippet>602</a>        <span class="macro">assert_eq!</span>(
+<a href=#603 id=603 data-nosnippet>603</a>            storage.relativize_path(<span class="string">"memory:/path/to/file"</span>).unwrap(),
+<a href=#604 id=604 data-nosnippet>604</a>            <span class="string">"path/to/file"
+<a href=#605 id=605 data-nosnippet>605</a>        </span>);
+<a href=#606 id=606 data-nosnippet>606</a>        <span class="comment">// Without the scheme prefix, falls back to stripping the leading slash
+<a href=#607 id=607 data-nosnippet>607</a>        </span><span class="macro">assert_eq!</span>(
+<a href=#608 id=608 data-nosnippet>608</a>            storage.relativize_path(<span class="string">"/path/to/file"</span>).unwrap(),
+<a href=#609 id=609 data-nosnippet>609</a>            <span class="string">"path/to/file"
+<a href=#610 id=610 data-nosnippet>610</a>        </span>);
+<a href=#611 id=611 data-nosnippet>611</a>    }
+<a href=#612 id=612 data-nosnippet>612</a>
+<a href=#613 id=613 data-nosnippet>613</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
+<a href=#614 id=614 data-nosnippet>614</a>    #[test]
+<a href=#615 id=615 data-nosnippet>615</a>    </span><span class="kw">fn </span>test_relativize_path_fs() {
+<a href=#616 id=616 data-nosnippet>616</a>        <span class="kw">let </span>storage = OpenDalStorage::LocalFs;
+<a href=#617 id=617 data-nosnippet>617</a>
+<a href=#618 id=618 data-nosnippet>618</a>        <span class="macro">assert_eq!</span>(
+<a href=#619 id=619 data-nosnippet>619</a>            storage
+<a href=#620 id=620 data-nosnippet>620</a>                .relativize_path(<span class="string">"file:/tmp/data/file.parquet"</span>)
+<a href=#621 id=621 data-nosnippet>621</a>                .unwrap(),
+<a href=#622 id=622 data-nosnippet>622</a>            <span class="string">"tmp/data/file.parquet"
+<a href=#623 id=623 data-nosnippet>623</a>        </span>);
+<a href=#624 id=624 data-nosnippet>624</a>        <span class="macro">assert_eq!</span>(
+<a href=#625 id=625 data-nosnippet>625</a>            storage.relativize_path(<span class="string">"/tmp/data/file.parquet"</span>).unwrap(),
+<a href=#626 id=626 data-nosnippet>626</a>            <span class="string">"tmp/data/file.parquet"
+<a href=#627 id=627 data-nosnippet>627</a>        </span>);
+<a href=#628 id=628 data-nosnippet>628</a>    }
+<a href=#629 id=629 data-nosnippet>629</a>
+<a href=#630 id=630 data-nosnippet>630</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#631 id=631 data-nosnippet>631</a>    #[test]
+<a href=#632 id=632 data-nosnippet>632</a>    </span><span class="kw">fn </span>test_relativize_path_s3() {
+<a href=#633 id=633 data-nosnippet>633</a>        <span class="kw">let </span>storage = OpenDalStorage::S3 {
+<a href=#634 id=634 data-nosnippet>634</a>            configured_scheme: <span class="string">"s3"</span>.to_string(),
+<a href=#635 id=635 data-nosnippet>635</a>            config: Arc::new(S3Config::default()),
+<a href=#636 id=636 data-nosnippet>636</a>            customized_credential_load: <span class="prelude-val">None</span>,
+<a href=#637 id=637 data-nosnippet>637</a>        };
+<a href=#638 id=638 data-nosnippet>638</a>
+<a href=#639 id=639 data-nosnippet>639</a>        <span class="macro">assert_eq!</span>(
+<a href=#640 id=640 data-nosnippet>640</a>            storage
+<a href=#641 id=641 data-nosnippet>641</a>                .relativize_path(<span class="string">"s3://my-bucket/path/to/file.parquet"</span>)
+<a href=#642 id=642 data-nosnippet>642</a>                .unwrap(),
+<a href=#643 id=643 data-nosnippet>643</a>            <span class="string">"path/to/file.parquet"
+<a href=#644 id=644 data-nosnippet>644</a>        </span>);
+<a href=#645 id=645 data-nosnippet>645</a>
+<a href=#646 id=646 data-nosnippet>646</a>        <span class="comment">// s3a scheme
+<a href=#647 id=647 data-nosnippet>647</a>        </span><span class="kw">let </span>storage_s3a = OpenDalStorage::S3 {
+<a href=#648 id=648 data-nosnippet>648</a>            configured_scheme: <span class="string">"s3a"</span>.to_string(),
+<a href=#649 id=649 data-nosnippet>649</a>            config: Arc::new(S3Config::default()),
+<a href=#650 id=650 data-nosnippet>650</a>            customized_credential_load: <span class="prelude-val">None</span>,
+<a href=#651 id=651 data-nosnippet>651</a>        };
+<a href=#652 id=652 data-nosnippet>652</a>        <span class="macro">assert_eq!</span>(
+<a href=#653 id=653 data-nosnippet>653</a>            storage_s3a
+<a href=#654 id=654 data-nosnippet>654</a>                .relativize_path(<span class="string">"s3a://my-bucket/path/to/file.parquet"</span>)
+<a href=#655 id=655 data-nosnippet>655</a>                .unwrap(),
+<a href=#656 id=656 data-nosnippet>656</a>            <span class="string">"path/to/file.parquet"
+<a href=#657 id=657 data-nosnippet>657</a>        </span>);
+<a href=#658 id=658 data-nosnippet>658</a>    }
+<a href=#659 id=659 data-nosnippet>659</a>
+<a href=#660 id=660 data-nosnippet>660</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#661 id=661 data-nosnippet>661</a>    #[test]
+<a href=#662 id=662 data-nosnippet>662</a>    </span><span class="kw">fn </span>test_relativize_path_s3_scheme_mismatch() {
+<a href=#663 id=663 data-nosnippet>663</a>        <span class="kw">let </span>storage = OpenDalStorage::S3 {
+<a href=#664 id=664 data-nosnippet>664</a>            configured_scheme: <span class="string">"s3"</span>.to_string(),
+<a href=#665 id=665 data-nosnippet>665</a>            config: Arc::new(S3Config::default()),
+<a href=#666 id=666 data-nosnippet>666</a>            customized_credential_load: <span class="prelude-val">None</span>,
+<a href=#667 id=667 data-nosnippet>667</a>        };
+<a href=#668 id=668 data-nosnippet>668</a>
+<a href=#669 id=669 data-nosnippet>669</a>        <span class="comment">// Scheme mismatch should error
+<a href=#670 id=670 data-nosnippet>670</a>        </span><span class="macro">assert!</span>(
+<a href=#671 id=671 data-nosnippet>671</a>            storage
+<a href=#672 id=672 data-nosnippet>672</a>                .relativize_path(<span class="string">"s3a://my-bucket/path/to/file.parquet"</span>)
+<a href=#673 id=673 data-nosnippet>673</a>                .is_err()
+<a href=#674 id=674 data-nosnippet>674</a>        );
+<a href=#675 id=675 data-nosnippet>675</a>    }
+<a href=#676 id=676 data-nosnippet>676</a>
+<a href=#677 id=677 data-nosnippet>677</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
+<a href=#678 id=678 data-nosnippet>678</a>    #[test]
+<a href=#679 id=679 data-nosnippet>679</a>    </span><span class="kw">fn </span>test_relativize_path_gcs() {
+<a href=#680 id=680 data-nosnippet>680</a>        <span class="kw">let </span>storage = OpenDalStorage::Gcs {
+<a href=#681 id=681 data-nosnippet>681</a>            config: Arc::new(GcsConfig::default()),
+<a href=#682 id=682 data-nosnippet>682</a>        };
+<a href=#683 id=683 data-nosnippet>683</a>
+<a href=#684 id=684 data-nosnippet>684</a>        <span class="macro">assert_eq!</span>(
+<a href=#685 id=685 data-nosnippet>685</a>            storage
+<a href=#686 id=686 data-nosnippet>686</a>                .relativize_path(<span class="string">"gs://my-bucket/path/to/file.parquet"</span>)
+<a href=#687 id=687 data-nosnippet>687</a>                .unwrap(),
+<a href=#688 id=688 data-nosnippet>688</a>            <span class="string">"path/to/file.parquet"
+<a href=#689 id=689 data-nosnippet>689</a>        </span>);
+<a href=#690 id=690 data-nosnippet>690</a>    }
+<a href=#691 id=691 data-nosnippet>691</a>
+<a href=#692 id=692 data-nosnippet>692</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
+<a href=#693 id=693 data-nosnippet>693</a>    #[test]
+<a href=#694 id=694 data-nosnippet>694</a>    </span><span class="kw">fn </span>test_relativize_path_gcs_invalid_scheme() {
+<a href=#695 id=695 data-nosnippet>695</a>        <span class="kw">let </span>storage = OpenDalStorage::Gcs {
+<a href=#696 id=696 data-nosnippet>696</a>            config: Arc::new(GcsConfig::default()),
+<a href=#697 id=697 data-nosnippet>697</a>        };
+<a href=#698 id=698 data-nosnippet>698</a>
+<a href=#699 id=699 data-nosnippet>699</a>        <span class="macro">assert!</span>(
+<a href=#700 id=700 data-nosnippet>700</a>            storage
+<a href=#701 id=701 data-nosnippet>701</a>                .relativize_path(<span class="string">"s3://my-bucket/path/to/file.parquet"</span>)
+<a href=#702 id=702 data-nosnippet>702</a>                .is_err()
+<a href=#703 id=703 data-nosnippet>703</a>        );
+<a href=#704 id=704 data-nosnippet>704</a>    }
+<a href=#705 id=705 data-nosnippet>705</a>
+<a href=#706 id=706 data-nosnippet>706</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
+<a href=#707 id=707 data-nosnippet>707</a>    #[test]
+<a href=#708 id=708 data-nosnippet>708</a>    </span><span class="kw">fn </span>test_relativize_path_oss() {
+<a href=#709 id=709 data-nosnippet>709</a>        <span class="kw">let </span>storage = OpenDalStorage::Oss {
+<a href=#710 id=710 data-nosnippet>710</a>            config: Arc::new(OssConfig::default()),
+<a href=#711 id=711 data-nosnippet>711</a>        };
+<a href=#712 id=712 data-nosnippet>712</a>
+<a href=#713 id=713 data-nosnippet>713</a>        <span class="macro">assert_eq!</span>(
+<a href=#714 id=714 data-nosnippet>714</a>            storage
+<a href=#715 id=715 data-nosnippet>715</a>                .relativize_path(<span class="string">"oss://my-bucket/path/to/file.parquet"</span>)
+<a href=#716 id=716 data-nosnippet>716</a>                .unwrap(),
+<a href=#717 id=717 data-nosnippet>717</a>            <span class="string">"path/to/file.parquet"
+<a href=#718 id=718 data-nosnippet>718</a>        </span>);
+<a href=#719 id=719 data-nosnippet>719</a>    }
+<a href=#720 id=720 data-nosnippet>720</a>
+<a href=#721 id=721 data-nosnippet>721</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
+<a href=#722 id=722 data-nosnippet>722</a>    #[test]
+<a href=#723 id=723 data-nosnippet>723</a>    </span><span class="kw">fn </span>test_relativize_path_oss_invalid_scheme() {
+<a href=#724 id=724 data-nosnippet>724</a>        <span class="kw">let </span>storage = OpenDalStorage::Oss {
+<a href=#725 id=725 data-nosnippet>725</a>            config: Arc::new(OssConfig::default()),
+<a href=#726 id=726 data-nosnippet>726</a>        };
+<a href=#727 id=727 data-nosnippet>727</a>
+<a href=#728 id=728 data-nosnippet>728</a>        <span class="macro">assert!</span>(
+<a href=#729 id=729 data-nosnippet>729</a>            storage
+<a href=#730 id=730 data-nosnippet>730</a>                .relativize_path(<span class="string">"s3://my-bucket/path/to/file.parquet"</span>)
+<a href=#731 id=731 data-nosnippet>731</a>                .is_err()
+<a href=#732 id=732 data-nosnippet>732</a>        );
+<a href=#733 id=733 data-nosnippet>733</a>    }
+<a href=#734 id=734 data-nosnippet>734</a>
+<a href=#735 id=735 data-nosnippet>735</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
+<a href=#736 id=736 data-nosnippet>736</a>    #[test]
+<a href=#737 id=737 data-nosnippet>737</a>    </span><span class="kw">fn </span>test_relativize_path_azdls() {
+<a href=#738 id=738 data-nosnippet>738</a>        <span class="kw">let </span>storage = OpenDalStorage::Azdls {
+<a href=#739 id=739 data-nosnippet>739</a>            configured_scheme: AzureStorageScheme::Abfss,
+<a href=#740 id=740 data-nosnippet>740</a>            config: Arc::new(AzdlsConfig {
+<a href=#741 id=741 data-nosnippet>741</a>                account_name: <span class="prelude-val">Some</span>(<span class="string">"myaccount"</span>.to_string()),
+<a href=#742 id=742 data-nosnippet>742</a>                endpoint: <span class="prelude-val">Some</span>(<span class="string">"https://myaccount.dfs.core.windows.net"</span>.to_string()),
+<a href=#743 id=743 data-nosnippet>743</a>                ..Default::default()
+<a href=#744 id=744 data-nosnippet>744</a>            }),
+<a href=#745 id=745 data-nosnippet>745</a>        };
+<a href=#746 id=746 data-nosnippet>746</a>
+<a href=#747 id=747 data-nosnippet>747</a>        <span class="macro">assert_eq!</span>(
+<a href=#748 id=748 data-nosnippet>748</a>            storage
+<a href=#749 id=749 data-nosnippet>749</a>                .relativize_path(<span class="string">"abfss://myfs@myaccount.dfs.core.windows.net/path/to/file.parquet"</span>)
+<a href=#750 id=750 data-nosnippet>750</a>                .unwrap(),
+<a href=#751 id=751 data-nosnippet>751</a>            <span class="string">"/path/to/file.parquet"
+<a href=#752 id=752 data-nosnippet>752</a>        </span>);
+<a href=#753 id=753 data-nosnippet>753</a>    }
+<a href=#754 id=754 data-nosnippet>754</a>
+<a href=#755 id=755 data-nosnippet>755</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
+<a href=#756 id=756 data-nosnippet>756</a>    #[test]
+<a href=#757 id=757 data-nosnippet>757</a>    </span><span class="kw">fn </span>test_relativize_path_azdls_scheme_mismatch() {
+<a href=#758 id=758 data-nosnippet>758</a>        <span class="kw">let </span>storage = OpenDalStorage::Azdls {
+<a href=#759 id=759 data-nosnippet>759</a>            configured_scheme: AzureStorageScheme::Abfss,
+<a href=#760 id=760 data-nosnippet>760</a>            config: Arc::new(AzdlsConfig {
+<a href=#761 id=761 data-nosnippet>761</a>                account_name: <span class="prelude-val">Some</span>(<span class="string">"myaccount"</span>.to_string()),
+<a href=#762 id=762 data-nosnippet>762</a>                endpoint: <span class="prelude-val">Some</span>(<span class="string">"https://myaccount.dfs.core.windows.net"</span>.to_string()),
+<a href=#763 id=763 data-nosnippet>763</a>                ..Default::default()
+<a href=#764 id=764 data-nosnippet>764</a>            }),
+<a href=#765 id=765 data-nosnippet>765</a>        };
+<a href=#766 id=766 data-nosnippet>766</a>
+<a href=#767 id=767 data-nosnippet>767</a>        <span class="comment">// wasbs scheme doesn't match configured abfss
+<a href=#768 id=768 data-nosnippet>768</a>        </span><span class="macro">assert!</span>(
+<a href=#769 id=769 data-nosnippet>769</a>            storage
+<a href=#770 id=770 data-nosnippet>770</a>                .relativize_path(<span class="string">"wasbs://myfs@myaccount.dfs.core.windows.net/path/to/file.parquet"</span>)
+<a href=#771 id=771 data-nosnippet>771</a>                .is_err()
+<a href=#772 id=772 data-nosnippet>772</a>        );
+<a href=#773 id=773 data-nosnippet>773</a>    }
+<a href=#774 id=774 data-nosnippet>774</a>}
 </code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/src/iceberg_storage_opendal/resolving.rs.html b/api/src/iceberg_storage_opendal/resolving.rs.html
new file mode 100644
index 000000000..1cdadf114
--- /dev/null
+++ b/api/src/iceberg_storage_opendal/resolving.rs.html
@@ -0,0 +1,320 @@
+<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Source of the Rust file `crates/storage/opendal/src/resolving.rs`."><title>resolving.rs - source</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe4 [...]
+<a href=#2 id=2 data-nosnippet>2</a>// or more contributor license agreements.  See the NOTICE file
+<a href=#3 id=3 data-nosnippet>3</a>// distributed with this work for additional information
+<a href=#4 id=4 data-nosnippet>4</a>// regarding copyright ownership.  The ASF licenses this file
+<a href=#5 id=5 data-nosnippet>5</a>// to you under the Apache License, Version 2.0 (the
+<a href=#6 id=6 data-nosnippet>6</a>// "License"); you may not use this file except in compliance
+<a href=#7 id=7 data-nosnippet>7</a>// with the License.  You may obtain a copy of the License at
+<a href=#8 id=8 data-nosnippet>8</a>//
+<a href=#9 id=9 data-nosnippet>9</a>//   http://www.apache.org/licenses/LICENSE-2.0
+<a href=#10 id=10 data-nosnippet>10</a>//
+<a href=#11 id=11 data-nosnippet>11</a>// Unless required by applicable law or agreed to in writing,
+<a href=#12 id=12 data-nosnippet>12</a>// software distributed under the License is distributed on an
+<a href=#13 id=13 data-nosnippet>13</a>// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+<a href=#14 id=14 data-nosnippet>14</a>// KIND, either express or implied.  See the License for the
+<a href=#15 id=15 data-nosnippet>15</a>// specific language governing permissions and limitations
+<a href=#16 id=16 data-nosnippet>16</a>// under the License.
+<a href=#17 id=17 data-nosnippet>17</a>
+<a href=#18 id=18 data-nosnippet>18</a></span><span class="doccomment">//! Resolving storage that auto-detects the scheme from a path and delegates
+<a href=#19 id=19 data-nosnippet>19</a>//! to the appropriate [`OpenDalStorage`] variant.
+<a href=#20 id=20 data-nosnippet>20</a>
+<a href=#21 id=21 data-nosnippet>21</a></span><span class="kw">use </span>std::collections::HashMap;
+<a href=#22 id=22 data-nosnippet>22</a><span class="kw">use </span>std::sync::{Arc, RwLock};
+<a href=#23 id=23 data-nosnippet>23</a>
+<a href=#24 id=24 data-nosnippet>24</a><span class="kw">use </span>async_trait::async_trait;
+<a href=#25 id=25 data-nosnippet>25</a><span class="kw">use </span>bytes::Bytes;
+<a href=#26 id=26 data-nosnippet>26</a><span class="kw">use </span>futures::StreamExt;
+<a href=#27 id=27 data-nosnippet>27</a><span class="kw">use </span>futures::stream::BoxStream;
+<a href=#28 id=28 data-nosnippet>28</a><span class="kw">use </span>iceberg::io::{
+<a href=#29 id=29 data-nosnippet>29</a>    FileMetadata, FileRead, FileWrite, InputFile, OutputFile, Storage, StorageConfig,
+<a href=#30 id=30 data-nosnippet>30</a>    StorageFactory,
+<a href=#31 id=31 data-nosnippet>31</a>};
+<a href=#32 id=32 data-nosnippet>32</a><span class="kw">use </span>iceberg::{Error, ErrorKind, <span class="prelude-ty">Result</span>};
+<a href=#33 id=33 data-nosnippet>33</a><span class="kw">use </span>opendal::Scheme;
+<a href=#34 id=34 data-nosnippet>34</a><span class="kw">use </span>serde::{Deserialize, Serialize};
+<a href=#35 id=35 data-nosnippet>35</a><span class="kw">use </span>url::Url;
+<a href=#36 id=36 data-nosnippet>36</a>
+<a href=#37 id=37 data-nosnippet>37</a><span class="kw">use </span><span class="kw">crate</span>::OpenDalStorage;
+<a href=#38 id=38 data-nosnippet>38</a><span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#39 id=39 data-nosnippet>39</a></span><span class="kw">use </span><span class="kw">crate</span>::s3::CustomAwsCredentialLoader;
+<a href=#40 id=40 data-nosnippet>40</a>
+<a href=#41 id=41 data-nosnippet>41</a><span class="doccomment">/// Schemes supported by OpenDalResolvingStorage
+<a href=#42 id=42 data-nosnippet>42</a></span><span class="kw">pub const </span>SCHEME_MEMORY: <span class="kw-2">&amp;</span>str = <span class="string">"memory"</span>;
+<a href=#43 id=43 data-nosnippet>43</a><span class="kw">pub const </span>SCHEME_FILE: <span class="kw-2">&amp;</span>str = <span class="string">"file"</span>;
+<a href=#44 id=44 data-nosnippet>44</a><span class="kw">pub const </span>SCHEME_S3: <span class="kw-2">&amp;</span>str = <span class="string">"s3"</span>;
+<a href=#45 id=45 data-nosnippet>45</a><span class="kw">pub const </span>SCHEME_S3A: <span class="kw-2">&amp;</span>str = <span class="string">"s3a"</span>;
+<a href=#46 id=46 data-nosnippet>46</a><span class="kw">pub const </span>SCHEME_S3N: <span class="kw-2">&amp;</span>str = <span class="string">"s3n"</span>;
+<a href=#47 id=47 data-nosnippet>47</a><span class="kw">pub const </span>SCHEME_GS: <span class="kw-2">&amp;</span>str = <span class="string">"gs"</span>;
+<a href=#48 id=48 data-nosnippet>48</a><span class="kw">pub const </span>SCHEME_GCS: <span class="kw-2">&amp;</span>str = <span class="string">"gcs"</span>;
+<a href=#49 id=49 data-nosnippet>49</a><span class="kw">pub const </span>SCHEME_OSS: <span class="kw-2">&amp;</span>str = <span class="string">"oss"</span>;
+<a href=#50 id=50 data-nosnippet>50</a><span class="kw">pub const </span>SCHEME_ABFSS: <span class="kw-2">&amp;</span>str = <span class="string">"abfss"</span>;
+<a href=#51 id=51 data-nosnippet>51</a><span class="kw">pub const </span>SCHEME_ABFS: <span class="kw-2">&amp;</span>str = <span class="string">"abfs"</span>;
+<a href=#52 id=52 data-nosnippet>52</a><span class="kw">pub const </span>SCHEME_WASBS: <span class="kw-2">&amp;</span>str = <span class="string">"wasbs"</span>;
+<a href=#53 id=53 data-nosnippet>53</a><span class="kw">pub const </span>SCHEME_WASB: <span class="kw-2">&amp;</span>str = <span class="string">"wasb"</span>;
+<a href=#54 id=54 data-nosnippet>54</a>
+<a href=#55 id=55 data-nosnippet>55</a><span class="doccomment">/// Parse a URL scheme string into an [`opendal::Scheme`].
+<a href=#56 id=56 data-nosnippet>56</a></span><span class="kw">fn </span>parse_scheme(scheme: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Scheme&gt; {
+<a href=#57 id=57 data-nosnippet>57</a>    <span class="kw">match </span>scheme {
+<a href=#58 id=58 data-nosnippet>58</a>        SCHEME_MEMORY =&gt; <span class="prelude-val">Ok</span>(Scheme::Memory),
+<a href=#59 id=59 data-nosnippet>59</a>        SCHEME_FILE | <span class="string">"" </span>=&gt; <span class="prelude-val">Ok</span>(Scheme::Fs),
+<a href=#60 id=60 data-nosnippet>60</a>        SCHEME_S3 | SCHEME_S3A | SCHEME_S3N =&gt; <span class="prelude-val">Ok</span>(Scheme::S3),
+<a href=#61 id=61 data-nosnippet>61</a>        SCHEME_GS | SCHEME_GCS =&gt; <span class="prelude-val">Ok</span>(Scheme::Gcs),
+<a href=#62 id=62 data-nosnippet>62</a>        SCHEME_OSS =&gt; <span class="prelude-val">Ok</span>(Scheme::Oss),
+<a href=#63 id=63 data-nosnippet>63</a>        SCHEME_ABFSS | SCHEME_ABFS | SCHEME_WASBS | SCHEME_WASB =&gt; <span class="prelude-val">Ok</span>(Scheme::Azdls),
+<a href=#64 id=64 data-nosnippet>64</a>        s =&gt; s.parse::&lt;Scheme&gt;().map_err(|e| {
+<a href=#65 id=65 data-nosnippet>65</a>            Error::new(
+<a href=#66 id=66 data-nosnippet>66</a>                ErrorKind::FeatureUnsupported,
+<a href=#67 id=67 data-nosnippet>67</a>                <span class="macro">format!</span>(<span class="string">"Unsupported storage scheme: {s}: {e}"</span>),
+<a href=#68 id=68 data-nosnippet>68</a>            )
+<a href=#69 id=69 data-nosnippet>69</a>        }),
+<a href=#70 id=70 data-nosnippet>70</a>    }
+<a href=#71 id=71 data-nosnippet>71</a>}
+<a href=#72 id=72 data-nosnippet>72</a>
+<a href=#73 id=73 data-nosnippet>73</a><span class="doccomment">/// Extract the scheme string from a path URL.
+<a href=#74 id=74 data-nosnippet>74</a></span><span class="kw">fn </span>extract_scheme(path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;String&gt; {
+<a href=#75 id=75 data-nosnippet>75</a>    <span class="kw">let </span>url = Url::parse(path).map_err(|e| {
+<a href=#76 id=76 data-nosnippet>76</a>        Error::new(
+<a href=#77 id=77 data-nosnippet>77</a>            ErrorKind::DataInvalid,
+<a href=#78 id=78 data-nosnippet>78</a>            <span class="macro">format!</span>(<span class="string">"Invalid path: {path}, failed to parse URL: {e}"</span>),
+<a href=#79 id=79 data-nosnippet>79</a>        )
+<a href=#80 id=80 data-nosnippet>80</a>    })<span class="question-mark">?</span>;
+<a href=#81 id=81 data-nosnippet>81</a>    <span class="prelude-val">Ok</span>(url.scheme().to_string())
+<a href=#82 id=82 data-nosnippet>82</a>}
+<a href=#83 id=83 data-nosnippet>83</a>
+<a href=#84 id=84 data-nosnippet>84</a><span class="doccomment">/// Build an [`OpenDalStorage`] variant for the given scheme and config properties.
+<a href=#85 id=85 data-nosnippet>85</a></span><span class="kw">fn </span>build_storage_for_scheme(
+<a href=#86 id=86 data-nosnippet>86</a>    scheme: <span class="kw-2">&amp;</span>str,
+<a href=#87 id=87 data-nosnippet>87</a>    props: <span class="kw-2">&amp;</span>HashMap&lt;String, String&gt;,
+<a href=#88 id=88 data-nosnippet>88</a>    <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)] </span>customized_credential_load: <span class="kw-2">&amp;</span><span class="prelude-ty">Option</span>&lt;CustomAwsCredentialLoader&gt;,
+<a href=#89 id=89 data-nosnippet>89</a>) -&gt; <span class="prelude-ty">Result</span>&lt;OpenDalStorage&gt; {
+<a href=#90 id=90 data-nosnippet>90</a>    <span class="kw">match </span>parse_scheme(scheme)<span class="question-mark">? </span>{
+<a href=#91 id=91 data-nosnippet>91</a>        <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#92 id=92 data-nosnippet>92</a>        </span>Scheme::S3 =&gt; {
+<a href=#93 id=93 data-nosnippet>93</a>            <span class="kw">let </span>config = <span class="kw">crate</span>::s3::s3_config_parse(props.clone())<span class="question-mark">?</span>;
+<a href=#94 id=94 data-nosnippet>94</a>            <span class="prelude-val">Ok</span>(OpenDalStorage::S3 {
+<a href=#95 id=95 data-nosnippet>95</a>                configured_scheme: scheme.to_string(),
+<a href=#96 id=96 data-nosnippet>96</a>                config: Arc::new(config),
+<a href=#97 id=97 data-nosnippet>97</a>                customized_credential_load: customized_credential_load.clone(),
+<a href=#98 id=98 data-nosnippet>98</a>            })
+<a href=#99 id=99 data-nosnippet>99</a>        }
+<a href=#100 id=100 data-nosnippet>100</a>        <span class="attr">#[cfg(feature = <span class="string">"opendal-gcs"</span>)]
+<a href=#101 id=101 data-nosnippet>101</a>        </span>Scheme::Gcs =&gt; {
+<a href=#102 id=102 data-nosnippet>102</a>            <span class="kw">let </span>config = <span class="kw">crate</span>::gcs::gcs_config_parse(props.clone())<span class="question-mark">?</span>;
+<a href=#103 id=103 data-nosnippet>103</a>            <span class="prelude-val">Ok</span>(OpenDalStorage::Gcs {
+<a href=#104 id=104 data-nosnippet>104</a>                config: Arc::new(config),
+<a href=#105 id=105 data-nosnippet>105</a>            })
+<a href=#106 id=106 data-nosnippet>106</a>        }
+<a href=#107 id=107 data-nosnippet>107</a>        <span class="attr">#[cfg(feature = <span class="string">"opendal-oss"</span>)]
+<a href=#108 id=108 data-nosnippet>108</a>        </span>Scheme::Oss =&gt; {
+<a href=#109 id=109 data-nosnippet>109</a>            <span class="kw">let </span>config = <span class="kw">crate</span>::oss::oss_config_parse(props.clone())<span class="question-mark">?</span>;
+<a href=#110 id=110 data-nosnippet>110</a>            <span class="prelude-val">Ok</span>(OpenDalStorage::Oss {
+<a href=#111 id=111 data-nosnippet>111</a>                config: Arc::new(config),
+<a href=#112 id=112 data-nosnippet>112</a>            })
+<a href=#113 id=113 data-nosnippet>113</a>        }
+<a href=#114 id=114 data-nosnippet>114</a>        <span class="attr">#[cfg(feature = <span class="string">"opendal-azdls"</span>)]
+<a href=#115 id=115 data-nosnippet>115</a>        </span>Scheme::Azdls =&gt; {
+<a href=#116 id=116 data-nosnippet>116</a>            <span class="kw">let </span>configured_scheme: <span class="kw">crate</span>::azdls::AzureStorageScheme = scheme.parse()<span class="question-mark">?</span>;
+<a href=#117 id=117 data-nosnippet>117</a>            <span class="kw">let </span>config = <span class="kw">crate</span>::azdls::azdls_config_parse(props.clone())<span class="question-mark">?</span>;
+<a href=#118 id=118 data-nosnippet>118</a>            <span class="prelude-val">Ok</span>(OpenDalStorage::Azdls {
+<a href=#119 id=119 data-nosnippet>119</a>                configured_scheme,
+<a href=#120 id=120 data-nosnippet>120</a>                config: Arc::new(config),
+<a href=#121 id=121 data-nosnippet>121</a>            })
+<a href=#122 id=122 data-nosnippet>122</a>        }
+<a href=#123 id=123 data-nosnippet>123</a>        <span class="attr">#[cfg(feature = <span class="string">"opendal-fs"</span>)]
+<a href=#124 id=124 data-nosnippet>124</a>        </span>Scheme::Fs =&gt; <span class="prelude-val">Ok</span>(OpenDalStorage::LocalFs),
+<a href=#125 id=125 data-nosnippet>125</a>        <span class="attr">#[cfg(feature = <span class="string">"opendal-memory"</span>)]
+<a href=#126 id=126 data-nosnippet>126</a>        </span>Scheme::Memory =&gt; <span class="prelude-val">Ok</span>(OpenDalStorage::Memory(<span class="kw">crate</span>::memory::memory_config_build()<span class="question-mark">?</span>)),
+<a href=#127 id=127 data-nosnippet>127</a>        unsupported =&gt; <span class="prelude-val">Err</span>(Error::new(
+<a href=#128 id=128 data-nosnippet>128</a>            ErrorKind::FeatureUnsupported,
+<a href=#129 id=129 data-nosnippet>129</a>            <span class="macro">format!</span>(<span class="string">"Unsupported storage scheme: {unsupported}"</span>),
+<a href=#130 id=130 data-nosnippet>130</a>        )),
+<a href=#131 id=131 data-nosnippet>131</a>    }
+<a href=#132 id=132 data-nosnippet>132</a>}
+<a href=#133 id=133 data-nosnippet>133</a>
+<a href=#134 id=134 data-nosnippet>134</a><span class="doccomment">/// A resolving storage factory that creates [`OpenDalResolvingStorage`] instances.
+<a href=#135 id=135 data-nosnippet>135</a>///
+<a href=#136 id=136 data-nosnippet>136</a>/// This factory accepts paths from any supported storage system and dynamically
+<a href=#137 id=137 data-nosnippet>137</a>/// delegates operations to the appropriate [`OpenDalStorage`] variant based on
+<a href=#138 id=138 data-nosnippet>138</a>/// the path scheme.
+<a href=#139 id=139 data-nosnippet>139</a>///
+<a href=#140 id=140 data-nosnippet>140</a>/// # Example
+<a href=#141 id=141 data-nosnippet>141</a>///
+<a href=#142 id=142 data-nosnippet>142</a>/// ```rust,ignore
+<a href=#143 id=143 data-nosnippet>143</a>/// use std::sync::Arc;
+<a href=#144 id=144 data-nosnippet>144</a>/// use iceberg::io::FileIOBuilder;
+<a href=#145 id=145 data-nosnippet>145</a>/// use iceberg_storage_opendal::OpenDalResolvingStorageFactory;
+<a href=#146 id=146 data-nosnippet>146</a>///
+<a href=#147 id=147 data-nosnippet>147</a>/// let factory = OpenDalResolvingStorageFactory::new();
+<a href=#148 id=148 data-nosnippet>148</a>/// let file_io = FileIOBuilder::new(Arc::new(factory))
+<a href=#149 id=149 data-nosnippet>149</a>///     .with_prop("s3.region", "us-east-1")
+<a href=#150 id=150 data-nosnippet>150</a>///     .build();
+<a href=#151 id=151 data-nosnippet>151</a>/// ```
+<a href=#152 id=152 data-nosnippet>152</a></span><span class="attr">#[derive(Clone, Debug, Serialize, Deserialize)]
+<a href=#153 id=153 data-nosnippet>153</a></span><span class="kw">pub struct </span>OpenDalResolvingStorageFactory {
+<a href=#154 id=154 data-nosnippet>154</a>    <span class="doccomment">/// Custom AWS credential loader for S3 storage.
+<a href=#155 id=155 data-nosnippet>155</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#156 id=156 data-nosnippet>156</a>    #[serde(skip)]
+<a href=#157 id=157 data-nosnippet>157</a>    </span>customized_credential_load: <span class="prelude-ty">Option</span>&lt;CustomAwsCredentialLoader&gt;,
+<a href=#158 id=158 data-nosnippet>158</a>}
+<a href=#159 id=159 data-nosnippet>159</a>
+<a href=#160 id=160 data-nosnippet>160</a><span class="kw">impl </span>Default <span class="kw">for </span>OpenDalResolvingStorageFactory {
+<a href=#161 id=161 data-nosnippet>161</a>    <span class="kw">fn </span>default() -&gt; <span class="self">Self </span>{
+<a href=#162 id=162 data-nosnippet>162</a>        <span class="self">Self</span>::new()
+<a href=#163 id=163 data-nosnippet>163</a>    }
+<a href=#164 id=164 data-nosnippet>164</a>}
+<a href=#165 id=165 data-nosnippet>165</a>
+<a href=#166 id=166 data-nosnippet>166</a><span class="kw">impl </span>OpenDalResolvingStorageFactory {
+<a href=#167 id=167 data-nosnippet>167</a>    <span class="doccomment">/// Create a new resolving storage factory.
+<a href=#168 id=168 data-nosnippet>168</a>    </span><span class="kw">pub fn </span>new() -&gt; <span class="self">Self </span>{
+<a href=#169 id=169 data-nosnippet>169</a>        <span class="self">Self </span>{
+<a href=#170 id=170 data-nosnippet>170</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#171 id=171 data-nosnippet>171</a>            </span>customized_credential_load: <span class="prelude-val">None</span>,
+<a href=#172 id=172 data-nosnippet>172</a>        }
+<a href=#173 id=173 data-nosnippet>173</a>    }
+<a href=#174 id=174 data-nosnippet>174</a>
+<a href=#175 id=175 data-nosnippet>175</a>    <span class="doccomment">/// Set a custom AWS credential loader for S3 storage.
+<a href=#176 id=176 data-nosnippet>176</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#177 id=177 data-nosnippet>177</a>    </span><span class="kw">pub fn </span>with_s3_credential_loader(<span class="kw-2">mut </span><span class="self">self</span>, loader: CustomAwsCredentialLoader) -&gt; <span class="self">Self </span>{
+<a href=#178 id=178 data-nosnippet>178</a>        <span class="self">self</span>.customized_credential_load = <span class="prelude-val">Some</span>(loader);
+<a href=#179 id=179 data-nosnippet>179</a>        <span class="self">self
+<a href=#180 id=180 data-nosnippet>180</a>    </span>}
+<a href=#181 id=181 data-nosnippet>181</a>}
+<a href=#182 id=182 data-nosnippet>182</a>
+<a href=#183 id=183 data-nosnippet>183</a><span class="attr">#[typetag::serde]
+<a href=#184 id=184 data-nosnippet>184</a></span><span class="kw">impl </span>StorageFactory <span class="kw">for </span>OpenDalResolvingStorageFactory {
+<a href=#185 id=185 data-nosnippet>185</a>    <span class="kw">fn </span>build(<span class="kw-2">&amp;</span><span class="self">self</span>, config: <span class="kw-2">&amp;</span>StorageConfig) -&gt; <span class="prelude-ty">Result</span>&lt;Arc&lt;<span class="kw">dyn </span>Storage&gt;&gt; {
+<a href=#186 id=186 data-nosnippet>186</a>        <span class="prelude-val">Ok</span>(Arc::new(OpenDalResolvingStorage {
+<a href=#187 id=187 data-nosnippet>187</a>            props: config.props().clone(),
+<a href=#188 id=188 data-nosnippet>188</a>            storages: RwLock::new(HashMap::new()),
+<a href=#189 id=189 data-nosnippet>189</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#190 id=190 data-nosnippet>190</a>            </span>customized_credential_load: <span class="self">self</span>.customized_credential_load.clone(),
+<a href=#191 id=191 data-nosnippet>191</a>        }))
+<a href=#192 id=192 data-nosnippet>192</a>    }
+<a href=#193 id=193 data-nosnippet>193</a>}
+<a href=#194 id=194 data-nosnippet>194</a>
+<a href=#195 id=195 data-nosnippet>195</a><span class="doccomment">/// A resolving storage that auto-detects the scheme from a path and delegates
+<a href=#196 id=196 data-nosnippet>196</a>/// to the appropriate [`OpenDalStorage`] variant.
+<a href=#197 id=197 data-nosnippet>197</a>///
+<a href=#198 id=198 data-nosnippet>198</a>/// Sub-storages are lazily created on first use for each scheme and cached
+<a href=#199 id=199 data-nosnippet>199</a>/// for subsequent operations.
+<a href=#200 id=200 data-nosnippet>200</a></span><span class="attr">#[derive(Debug, Serialize, Deserialize)]
+<a href=#201 id=201 data-nosnippet>201</a></span><span class="kw">pub struct </span>OpenDalResolvingStorage {
+<a href=#202 id=202 data-nosnippet>202</a>    <span class="doccomment">/// Configuration properties shared across all backends.
+<a href=#203 id=203 data-nosnippet>203</a>    </span>props: HashMap&lt;String, String&gt;,
+<a href=#204 id=204 data-nosnippet>204</a>    <span class="doccomment">/// Cache of scheme → storage mappings.
+<a href=#205 id=205 data-nosnippet>205</a>    </span><span class="attr">#[serde(skip, default)]
+<a href=#206 id=206 data-nosnippet>206</a>    </span>storages: RwLock&lt;HashMap&lt;String, Arc&lt;OpenDalStorage&gt;&gt;&gt;,
+<a href=#207 id=207 data-nosnippet>207</a>    <span class="doccomment">/// Custom AWS credential loader for S3 storage.
+<a href=#208 id=208 data-nosnippet>208</a>    </span><span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#209 id=209 data-nosnippet>209</a>    #[serde(skip)]
+<a href=#210 id=210 data-nosnippet>210</a>    </span>customized_credential_load: <span class="prelude-ty">Option</span>&lt;CustomAwsCredentialLoader&gt;,
+<a href=#211 id=211 data-nosnippet>211</a>}
+<a href=#212 id=212 data-nosnippet>212</a>
+<a href=#213 id=213 data-nosnippet>213</a><span class="kw">impl </span>OpenDalResolvingStorage {
+<a href=#214 id=214 data-nosnippet>214</a>    <span class="doccomment">/// Resolve the storage for the given path by extracting the scheme and
+<a href=#215 id=215 data-nosnippet>215</a>    /// returning the cached or newly-created [`OpenDalStorage`].
+<a href=#216 id=216 data-nosnippet>216</a>    </span><span class="kw">fn </span>resolve(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Arc&lt;OpenDalStorage&gt;&gt; {
+<a href=#217 id=217 data-nosnippet>217</a>        <span class="kw">let </span>scheme = extract_scheme(path)<span class="question-mark">?</span>;
+<a href=#218 id=218 data-nosnippet>218</a>
+<a href=#219 id=219 data-nosnippet>219</a>        <span class="comment">// Fast path: check read lock first.
+<a href=#220 id=220 data-nosnippet>220</a>        </span>{
+<a href=#221 id=221 data-nosnippet>221</a>            <span class="kw">let </span>cache = <span class="self">self
+<a href=#222 id=222 data-nosnippet>222</a>                </span>.storages
+<a href=#223 id=223 data-nosnippet>223</a>                .read()
+<a href=#224 id=224 data-nosnippet>224</a>                .map_err(|<span class="kw">_</span>| Error::new(ErrorKind::Unexpected, <span class="string">"Storage cache lock poisoned"</span>))<span class="question-mark">?</span>;
+<a href=#225 id=225 data-nosnippet>225</a>            <span class="kw">if let </span><span class="prelude-val">Some</span>(storage) = cache.get(<span class="kw-2">&amp;</span>scheme) {
+<a href=#226 id=226 data-nosnippet>226</a>                <span class="kw">return </span><span class="prelude-val">Ok</span>(storage.clone());
+<a href=#227 id=227 data-nosnippet>227</a>            }
+<a href=#228 id=228 data-nosnippet>228</a>        }
+<a href=#229 id=229 data-nosnippet>229</a>
+<a href=#230 id=230 data-nosnippet>230</a>        <span class="comment">// Slow path: build and insert under write lock.
+<a href=#231 id=231 data-nosnippet>231</a>        </span><span class="kw">let </span><span class="kw-2">mut </span>cache = <span class="self">self
+<a href=#232 id=232 data-nosnippet>232</a>            </span>.storages
+<a href=#233 id=233 data-nosnippet>233</a>            .write()
+<a href=#234 id=234 data-nosnippet>234</a>            .map_err(|<span class="kw">_</span>| Error::new(ErrorKind::Unexpected, <span class="string">"Storage cache lock poisoned"</span>))<span class="question-mark">?</span>;
+<a href=#235 id=235 data-nosnippet>235</a>
+<a href=#236 id=236 data-nosnippet>236</a>        <span class="comment">// Double-check after acquiring write lock.
+<a href=#237 id=237 data-nosnippet>237</a>        </span><span class="kw">if let </span><span class="prelude-val">Some</span>(storage) = cache.get(<span class="kw-2">&amp;</span>scheme) {
+<a href=#238 id=238 data-nosnippet>238</a>            <span class="kw">return </span><span class="prelude-val">Ok</span>(storage.clone());
+<a href=#239 id=239 data-nosnippet>239</a>        }
+<a href=#240 id=240 data-nosnippet>240</a>
+<a href=#241 id=241 data-nosnippet>241</a>        <span class="kw">let </span>storage = build_storage_for_scheme(
+<a href=#242 id=242 data-nosnippet>242</a>            <span class="kw-2">&amp;</span>scheme,
+<a href=#243 id=243 data-nosnippet>243</a>            <span class="kw-2">&amp;</span><span class="self">self</span>.props,
+<a href=#244 id=244 data-nosnippet>244</a>            <span class="attr">#[cfg(feature = <span class="string">"opendal-s3"</span>)]
+<a href=#245 id=245 data-nosnippet>245</a>            </span><span class="kw-2">&amp;</span><span class="self">self</span>.customized_credential_load,
+<a href=#246 id=246 data-nosnippet>246</a>        )<span class="question-mark">?</span>;
+<a href=#247 id=247 data-nosnippet>247</a>        <span class="kw">let </span>storage = Arc::new(storage);
+<a href=#248 id=248 data-nosnippet>248</a>        cache.insert(scheme, storage.clone());
+<a href=#249 id=249 data-nosnippet>249</a>        <span class="prelude-val">Ok</span>(storage)
+<a href=#250 id=250 data-nosnippet>250</a>    }
+<a href=#251 id=251 data-nosnippet>251</a>}
+<a href=#252 id=252 data-nosnippet>252</a>
+<a href=#253 id=253 data-nosnippet>253</a><span class="attr">#[async_trait]
+<a href=#254 id=254 data-nosnippet>254</a>#[typetag::serde]
+<a href=#255 id=255 data-nosnippet>255</a></span><span class="kw">impl </span>Storage <span class="kw">for </span>OpenDalResolvingStorage {
+<a href=#256 id=256 data-nosnippet>256</a>    <span class="kw">async fn </span>exists(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;bool&gt; {
+<a href=#257 id=257 data-nosnippet>257</a>        <span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.exists(path).<span class="kw">await
+<a href=#258 id=258 data-nosnippet>258</a>    </span>}
+<a href=#259 id=259 data-nosnippet>259</a>
+<a href=#260 id=260 data-nosnippet>260</a>    <span class="kw">async fn </span>metadata(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;FileMetadata&gt; {
+<a href=#261 id=261 data-nosnippet>261</a>        <span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.metadata(path).<span class="kw">await
+<a href=#262 id=262 data-nosnippet>262</a>    </span>}
+<a href=#263 id=263 data-nosnippet>263</a>
+<a href=#264 id=264 data-nosnippet>264</a>    <span class="kw">async fn </span>read(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Bytes&gt; {
+<a href=#265 id=265 data-nosnippet>265</a>        <span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.read(path).<span class="kw">await
+<a href=#266 id=266 data-nosnippet>266</a>    </span>}
+<a href=#267 id=267 data-nosnippet>267</a>
+<a href=#268 id=268 data-nosnippet>268</a>    <span class="kw">async fn </span>reader(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Box&lt;<span class="kw">dyn </span>FileRead&gt;&gt; {
+<a href=#269 id=269 data-nosnippet>269</a>        <span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.reader(path).<span class="kw">await
+<a href=#270 id=270 data-nosnippet>270</a>    </span>}
+<a href=#271 id=271 data-nosnippet>271</a>
+<a href=#272 id=272 data-nosnippet>272</a>    <span class="kw">async fn </span>write(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str, bs: Bytes) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#273 id=273 data-nosnippet>273</a>        <span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.write(path, bs).<span class="kw">await
+<a href=#274 id=274 data-nosnippet>274</a>    </span>}
+<a href=#275 id=275 data-nosnippet>275</a>
+<a href=#276 id=276 data-nosnippet>276</a>    <span class="kw">async fn </span>writer(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;Box&lt;<span class="kw">dyn </span>FileWrite&gt;&gt; {
+<a href=#277 id=277 data-nosnippet>277</a>        <span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.writer(path).<span class="kw">await
+<a href=#278 id=278 data-nosnippet>278</a>    </span>}
+<a href=#279 id=279 data-nosnippet>279</a>
+<a href=#280 id=280 data-nosnippet>280</a>    <span class="kw">async fn </span>delete(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#281 id=281 data-nosnippet>281</a>        <span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.delete(path).<span class="kw">await
+<a href=#282 id=282 data-nosnippet>282</a>    </span>}
+<a href=#283 id=283 data-nosnippet>283</a>
+<a href=#284 id=284 data-nosnippet>284</a>    <span class="kw">async fn </span>delete_prefix(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#285 id=285 data-nosnippet>285</a>        <span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.delete_prefix(path).<span class="kw">await
+<a href=#286 id=286 data-nosnippet>286</a>    </span>}
+<a href=#287 id=287 data-nosnippet>287</a>
+<a href=#288 id=288 data-nosnippet>288</a>    <span class="kw">async fn </span>delete_stream(<span class="kw-2">&amp;</span><span class="self">self</span>, <span class="kw-2">mut </span>paths: BoxStream&lt;<span class="lifetime">'static</span>, String&gt;) -&gt; <span class="prelude-ty">Result</span>&lt;()&gt; {
+<a href=#289 id=289 data-nosnippet>289</a>        <span class="comment">// Group paths by scheme so each resolved storage receives a batch,
+<a href=#290 id=290 data-nosnippet>290</a>        // avoiding repeated operator creation per path.
+<a href=#291 id=291 data-nosnippet>291</a>        </span><span class="kw">let </span><span class="kw-2">mut </span>grouped: HashMap&lt;String, Vec&lt;String&gt;&gt; = HashMap::new();
+<a href=#292 id=292 data-nosnippet>292</a>        <span class="kw">while let </span><span class="prelude-val">Some</span>(path) = paths.next().<span class="kw">await </span>{
+<a href=#293 id=293 data-nosnippet>293</a>            <span class="kw">let </span>scheme = extract_scheme(<span class="kw-2">&amp;</span>path)<span class="question-mark">?</span>;
+<a href=#294 id=294 data-nosnippet>294</a>            grouped.entry(scheme).or_default().push(path);
+<a href=#295 id=295 data-nosnippet>295</a>        }
+<a href=#296 id=296 data-nosnippet>296</a>
+<a href=#297 id=297 data-nosnippet>297</a>        <span class="kw">for </span>(<span class="kw">_</span>, paths) <span class="kw">in </span>grouped {
+<a href=#298 id=298 data-nosnippet>298</a>            <span class="kw">let </span>storage = <span class="self">self</span>.resolve(<span class="kw-2">&amp;</span>paths[<span class="number">0</span>])<span class="question-mark">?</span>;
+<a href=#299 id=299 data-nosnippet>299</a>            storage
+<a href=#300 id=300 data-nosnippet>300</a>                .delete_stream(futures::stream::iter(paths).boxed())
+<a href=#301 id=301 data-nosnippet>301</a>                .<span class="kw">await</span><span class="question-mark">?</span>;
+<a href=#302 id=302 data-nosnippet>302</a>        }
+<a href=#303 id=303 data-nosnippet>303</a>        <span class="prelude-val">Ok</span>(())
+<a href=#304 id=304 data-nosnippet>304</a>    }
+<a href=#305 id=305 data-nosnippet>305</a>
+<a href=#306 id=306 data-nosnippet>306</a>    <span class="kw">fn </span>new_input(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;InputFile&gt; {
+<a href=#307 id=307 data-nosnippet>307</a>        <span class="prelude-val">Ok</span>(InputFile::new(
+<a href=#308 id=308 data-nosnippet>308</a>            Arc::new(<span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.as_ref().clone()),
+<a href=#309 id=309 data-nosnippet>309</a>            path.to_string(),
+<a href=#310 id=310 data-nosnippet>310</a>        ))
+<a href=#311 id=311 data-nosnippet>311</a>    }
+<a href=#312 id=312 data-nosnippet>312</a>
+<a href=#313 id=313 data-nosnippet>313</a>    <span class="kw">fn </span>new_output(<span class="kw-2">&amp;</span><span class="self">self</span>, path: <span class="kw-2">&amp;</span>str) -&gt; <span class="prelude-ty">Result</span>&lt;OutputFile&gt; {
+<a href=#314 id=314 data-nosnippet>314</a>        <span class="prelude-val">Ok</span>(OutputFile::new(
+<a href=#315 id=315 data-nosnippet>315</a>            Arc::new(<span class="self">self</span>.resolve(path)<span class="question-mark">?</span>.as_ref().clone()),
+<a href=#316 id=316 data-nosnippet>316</a>            path.to_string(),
+<a href=#317 id=317 data-nosnippet>317</a>        ))
+<a href=#318 id=318 data-nosnippet>318</a>    }
+<a href=#319 id=319 data-nosnippet>319</a>}
+</code></pre></div></section></main></body></html>
\ No newline at end of file
diff --git a/api/trait.impl/core/clone/trait.Clone.js b/api/trait.impl/core/clone/trait.Clone.js
index dd1089e2a..e0cf99f8a 100644
--- a/api/trait.impl/core/clone/trait.Clone.js
+++ b/api/trait.impl/core/clone/trait.Clone.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"e [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/clone/trait.Clone.html\" title=\"trait core::clone::Clone\">Clone</a> for <a class=\"e [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[31853,4159,1073,631,984]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[31853,4159,1073,631,1336]}
\ No newline at end of file
diff --git a/api/trait.impl/core/default/trait.Default.js b/api/trait.impl/core/default/trait.Default.js
index e43f31e3b..452fec43d 100644
--- a/api/trait.impl/core/default/trait.Default.js
+++ b/api/trait.impl/core/default/trait.Default.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"enum\" href=\"iceberg/compression/enum.CompressionCodec.html\" title=\"enum iceberg::compression::CompressionCodec\">CompressionCodec</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/default/trait.Default.html\" title=\"trait core::default:: [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/default/trait.Default.html\" title=\"trait core::default::Default\">Default</a> for <a class=\"enum\" href=\"iceberg/compression/enum.CompressionCodec.html\" title=\"enum iceberg::compression::CompressionCodec\">CompressionCodec</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/default/trait.Default.html\" title=\"trait core::default:: [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[7050,356,347,653,347,371,341,428]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[7050,356,347,653,347,371,341,428,392]}
\ No newline at end of file
diff --git a/api/trait.impl/core/fmt/trait.Debug.js b/api/trait.impl/core/fmt/trait.Debug.js
index cc2c7ccb8..297f126ce 100644
--- a/api/trait.impl/core/fmt/trait.Debug.js
+++ b/api/trait.impl/core/fmt/trait.Debug.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" hr [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>"],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/fmt/trait.Debug.html\" title=\"trait core::fmt::Debug\">Debug</a> for <a class=\"enum\" hr [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[42365,618,905,5271,662,887,2089,327,903,972]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[42365,618,905,5271,662,887,2089,327,903,1647]}
\ No newline at end of file
diff --git a/api/trait.impl/core/marker/trait.Freeze.js b/api/trait.impl/core/marker/trait.Freeze.js
index 78c62caa8..e98d1a7ab 100644
--- a/api/trait.impl/core/marker/trait.Freeze.js
+++ b/api/trait.impl/core/marker/trait.Freeze.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"iceberg/enum.TableUpdate.html\" title=\"enum iceberg::TableUpdate\">TableUpdate</a>",1,["iceberg::catalog::TableUpdate"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">F [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">Freeze</a> for <a class=\"enum\" href=\"iceberg/enum.TableUpdate.html\" title=\"enum iceberg::TableUpdate\">TableUpdate</a>",1,["iceberg::catalog::TableUpdate"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Freeze.html\" title=\"trait core::marker::Freeze\">F [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[60338,401,741,1088,397,6364,801,1064,2542,405,390,1418,1159]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[60338,401,741,1088,397,6364,801,1064,2542,405,390,1418,1992]}
\ No newline at end of file
diff --git a/api/trait.impl/core/marker/trait.Send.js b/api/trait.impl/core/marker/trait.Send.js
index dcf8468b2..a58818db4 100644
--- a/api/trait.impl/core/marker/trait.Send.js
+++ b/api/trait.impl/core/marker/trait.Send.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>",1,["iceberg::arrow::value::FieldMatchMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core::marker::Send\">Send</a> for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>",1,["iceberg::arrow::value::FieldMatchMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Send.html\" title=\"trait core [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[54577,395,729,1070,391,6258,789,1046,2506,399,384,1394,1141]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[54577,395,729,1070,391,6258,789,1046,2506,399,384,1394,1961]}
\ No newline at end of file
diff --git a/api/trait.impl/core/marker/trait.Sync.js b/api/trait.impl/core/marker/trait.Sync.js
index 910723ffb..984c617f2 100644
--- a/api/trait.impl/core/marker/trait.Sync.js
+++ b/api/trait.impl/core/marker/trait.Sync.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg/puffin/struct.PuffinWriter.html\" title=\"struct iceberg::puffin::PuffinWriter\">PuffinWriter</a>",1,["iceberg::puffin::writer::PuffinWriter"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait  [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait core::marker::Sync\">Sync</a> for <a class=\"struct\" href=\"iceberg/puffin/struct.PuffinWriter.html\" title=\"struct iceberg::puffin::PuffinWriter\">PuffinWriter</a>",1,["iceberg::puffin::writer::PuffinWriter"]],["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html\" title=\"trait  [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[57648,395,729,1070,391,6258,789,1046,2506,399,384,1395,1141]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[57648,395,729,1070,391,6258,789,1046,2506,399,384,1395,1961]}
\ No newline at end of file
diff --git a/api/trait.impl/core/marker/trait.Unpin.js b/api/trait.impl/core/marker/trait.Unpin.js
index 9f691c742..97814908e 100644
--- a/api/trait.impl/core/marker/trait.Unpin.js
+++ b/api/trait.impl/core/marker/trait.Unpin.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>",1,["iceberg::arrow::value::FieldMatchMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait  [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait core::marker::Unpin\">Unpin</a> for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>",1,["iceberg::arrow::value::FieldMatchMode"]],["impl <a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html\" title=\"trait  [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[61128,398,735,1079,394,6309,795,1055,2524,402,387,1406,1150]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[61128,398,735,1079,394,6309,795,1055,2524,402,387,1406,1976]}
\ No newline at end of file
diff --git a/api/trait.impl/core/marker/trait.UnsafeUnpin.js b/api/trait.impl/core/marker/trait.UnsafeUnpin.js
index 1c0aa1f37..b95541140 100644
--- a/api/trait.impl/core/marker/trait.UnsafeUnpin.js
+++ b/api/trait.impl/core/marker/trait.UnsafeUnpin.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl UnsafeUnpin for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>",1,["iceberg::arrow::value::FieldMatchMode"]],["impl UnsafeUnpin for <a class=\"enum\" href=\"iceberg/compression/enum.CompressionCodec.html\" title=\"enum iceberg::compression::CompressionCodec\">CompressionCodec</a>",1,["iceberg::compression::CompressionCodec"]],["impl UnsafeUnpin [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl UnsafeUnpin for <a class=\"enum\" href=\"iceberg/arrow/enum.FieldMatchMode.html\" title=\"enum iceberg::arrow::FieldMatchMode\">FieldMatchMode</a>",1,["iceberg::arrow::value::FieldMatchMode"]],["impl UnsafeUnpin for <a class=\"enum\" href=\"iceberg/compression/enum.CompressionCodec.html\" title=\"enum iceberg::compression::CompressionCodec\">CompressionCodec</a>",1,["iceberg::compression::CompressionCodec"]],["impl UnsafeUnpin [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[37411,273,485,704,269,4184,545,680,1774,277,262,906,775]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[37411,273,485,704,269,4184,545,680,1774,277,262,906,1351]}
\ No newline at end of file
diff --git a/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js b/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
index 17f677b71..c0959903c 100644
--- a/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
+++ b/api/trait.impl/core/panic/unwind_safe/trait.RefUnwindSafe.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/partition_value_calculator/struct.PartitionValueCalculator.html\" title=\"struct iceberg::arrow::partition_value_calculator::PartitionValueCalculator\">PartitionValueCalculator</a>",1,["iceberg::arrow [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html\" title=\"trait core::panic::unwind_safe::RefUnwindSafe\">RefUnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/partition_value_calculator/struct.PartitionValueCalculator.html\" title=\"struct iceberg::arrow::partition_value_calculator::PartitionValueCalculator\">PartitionValueCalculator</a>",1,["iceberg::arrow [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[64790,446,831,1222,441,7110,891,1198,2812,449,435,1595,1294]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[64790,446,831,1222,441,7110,891,1198,2812,449,435,1595,2216]}
\ No newline at end of file
diff --git a/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js b/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
index 4a66b2318..ff4f4e7f0 100644
--- a/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
+++ b/api/trait.impl/core/panic/unwind_safe/trait.UnwindSafe.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/partition_value_calculator/struct.PartitionValueCalculator.html\" title=\"struct iceberg::arrow::partition_value_calculator::PartitionValueCalculator\">PartitionValueCalculator</a>",1,["iceberg::arrow::partiti [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl !<a class=\"trait\" href=\"https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html\" title=\"trait core::panic::unwind_safe::UnwindSafe\">UnwindSafe</a> for <a class=\"struct\" href=\"iceberg/arrow/partition_value_calculator/struct.PartitionValueCalculator.html\" title=\"struct iceberg::arrow::partition_value_calculator::PartitionValueCalculator\">PartitionValueCalculator</a>",1,["iceberg::arrow::partiti [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[63296,437,813,1195,432,6957,873,1171,2758,440,426,1559,1267]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[63296,437,813,1195,432,6957,873,1171,2758,440,426,1559,2171]}
\ No newline at end of file
diff --git a/api/trait.impl/iceberg/catalog/trait.Catalog.js b/api/trait.impl/iceberg/catalog/trait.Catalog.js
index d0f7118c9..818669858 100644
--- a/api/trait.impl/iceberg/catalog/trait.Catalog.js
+++ b/api/trait.impl/iceberg/catalog/trait.Catalog.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[]],["iceberg_catalog_glue",[["impl Catalog for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>"]]],["iceberg_catalog_hms",[["impl <a class=\"trait\" href=\"iceberg/catalog/trait.Catalog.html\" title=\"trait iceberg::catalog::Catalog\">Catalog</a> for <a class=\"struct\" href=\"iceberg_catalog_hms/struct.HmsCatalog.html\" title=\"struct iceber [...]
+    var implementors = Object.fromEntries([["iceberg",[]],["iceberg_catalog_glue",[["impl <a class=\"trait\" href=\"iceberg/catalog/trait.Catalog.html\" title=\"trait iceberg::catalog::Catalog\">Catalog</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalog.html\" title=\"struct iceberg_catalog_glue::GlueCatalog\">GlueCatalog</a>"]]],["iceberg_catalog_hms",[["impl <a class=\"trait\" href=\"iceberg/catalog/trait.Catalog.html\" title=\"trait iceberg::catalog::Catalog\"> [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[14,189,292,189,213,183]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[14,298,292,189,213,183]}
\ No newline at end of file
diff --git a/api/trait.impl/iceberg/catalog/trait.CatalogBuilder.js b/api/trait.impl/iceberg/catalog/trait.CatalogBuilder.js
index 44c41479f..878cb1be5 100644
--- a/api/trait.impl/iceberg/catalog/trait.CatalogBuilder.js
+++ b/api/trait.impl/iceberg/catalog/trait.CatalogBuilder.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[]],["iceberg_catalog_glue",[["impl CatalogBuilder for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalogBuilder.html\" title=\"struct iceberg_catalog_glue::GlueCatalogBuilder\">GlueCatalogBuilder</a>"]]],["iceberg_catalog_hms",[["impl <a class=\"trait\" href=\"iceberg/catalog/trait.CatalogBuilder.html\" title=\"trait iceberg::catalog::CatalogBuilder\">CatalogBuilder</a> for <a class=\"struct\" href=\"iceberg_catalog_h [...]
+    var implementors = Object.fromEntries([["iceberg",[]],["iceberg_catalog_glue",[["impl <a class=\"trait\" href=\"iceberg/catalog/trait.CatalogBuilder.html\" title=\"trait iceberg::catalog::CatalogBuilder\">CatalogBuilder</a> for <a class=\"struct\" href=\"iceberg_catalog_glue/struct.GlueCatalogBuilder.html\" title=\"struct iceberg_catalog_glue::GlueCatalogBuilder\">GlueCatalogBuilder</a>"]]],["iceberg_catalog_hms",[["impl <a class=\"trait\" href=\"iceberg/catalog/trait.CatalogBuilder. [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[14,217,334,217,241,211]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[14,340,334,217,241,211]}
\ No newline at end of file
diff --git a/api/trait.impl/iceberg/io/storage/trait.Storage.js b/api/trait.impl/iceberg/io/storage/trait.Storage.js
index 8502535d5..94853bbd1 100644
--- a/api/trait.impl/iceberg/io/storage/trait.Storage.js
+++ b/api/trait.impl/iceberg/io/storage/trait.Storage.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[]],["iceberg_storage_opendal",[["impl Storage for <a class=\"enum\" href=\"iceberg_storage_opendal/enum.OpenDalStorage.html\" title=\"enum iceberg_storage_opendal::OpenDalStorage\">OpenDalStorage</a>"]]]]);
+    var implementors = Object.fromEntries([["iceberg",[]],["iceberg_storage_opendal",[["impl Storage for <a class=\"enum\" href=\"iceberg_storage_opendal/enum.OpenDalStorage.html\" title=\"enum iceberg_storage_opendal::OpenDalStorage\">OpenDalStorage</a>"],["impl Storage for <a class=\"struct\" href=\"iceberg_storage_opendal/struct.OpenDalResolvingStorage.html\" title=\"struct iceberg_storage_opendal::OpenDalResolvingStorage\">OpenDalResolvingStorage</a>"]]]]);
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[14,201]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[14,405]}
\ No newline at end of file
diff --git a/api/trait.impl/iceberg/io/storage/trait.StorageFactory.js b/api/trait.impl/iceberg/io/storage/trait.StorageFactory.js
index bc35b16fd..804e13151 100644
--- a/api/trait.impl/iceberg/io/storage/trait.StorageFactory.js
+++ b/api/trait.impl/iceberg/io/storage/trait.StorageFactory.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[]],["iceberg_storage_opendal",[["impl StorageFactory for <a class=\"enum\" href=\"iceberg_storage_opendal/enum.OpenDalStorageFactory.html\" title=\"enum iceberg_storage_opendal::OpenDalStorageFactory\">OpenDalStorageFactory</a>"]]]]);
+    var implementors = Object.fromEntries([["iceberg",[]],["iceberg_storage_opendal",[["impl StorageFactory for <a class=\"enum\" href=\"iceberg_storage_opendal/enum.OpenDalStorageFactory.html\" title=\"enum iceberg_storage_opendal::OpenDalStorageFactory\">OpenDalStorageFactory</a>"],["impl StorageFactory for <a class=\"struct\" href=\"iceberg_storage_opendal/struct.OpenDalResolvingStorageFactory.html\" title=\"struct iceberg_storage_opendal::OpenDalResolvingStorageFactory\">OpenDalResol [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[14,229]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[14,461]}
\ No newline at end of file
diff --git a/api/trait.impl/serde_core/de/trait.Deserialize.js b/api/trait.impl/serde_core/de/trait.Deserialize.js
index a95db8ed7..74651f1ba 100644
--- a/api/trait.impl/serde_core/de/trait.Deserialize.js
+++ b/api/trait.impl/serde_core/de/trait.Deserialize.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl&lt;'de&gt; <a class=\"trait\" href=\"https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html\" title=\"trait serde_core::de::Deserialize\">Deserialize</a>&lt;'de&gt; for <a class=\"enum\" href=\"iceberg/compression/enum.CompressionCodec.html\" title=\"enum iceberg::compression::CompressionCodec\">CompressionCodec</a>"],["impl&lt;'de&gt; <a class=\"trait\" href=\"https://docs.rs/serde_core/1.0.228/serde_core/de/ [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl&lt;'de&gt; <a class=\"trait\" href=\"https://docs.rs/serde_core/1.0.228/serde_core/de/trait.Deserialize.html\" title=\"trait serde_core::de::Deserialize\">Deserialize</a>&lt;'de&gt; for <a class=\"enum\" href=\"iceberg/compression/enum.CompressionCodec.html\" title=\"enum iceberg::compression::CompressionCodec\">CompressionCodec</a>"],["impl&lt;'de&gt; <a class=\"trait\" href=\"https://docs.rs/serde_core/1.0.228/serde_core/de/ [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[23416,5445,725,741]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[23416,5445,725,1518]}
\ No newline at end of file
diff --git a/api/trait.impl/serde_core/ser/trait.Serialize.js b/api/trait.impl/serde_core/ser/trait.Serialize.js
index d388b2128..fe4d0f18e 100644
--- a/api/trait.impl/serde_core/ser/trait.Serialize.js
+++ b/api/trait.impl/serde_core/ser/trait.Serialize.js
@@ -1,9 +1,9 @@
 (function() {
-    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html\" title=\"trait serde_core::ser::Serialize\">Serialize</a> for <a class=\"enum\" href=\"iceberg/compression/enum.CompressionCodec.html\" title=\"enum iceberg::compression::CompressionCodec\">CompressionCodec</a>"],["impl <a class=\"trait\" href=\"https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html\" title=\"trait [...]
+    var implementors = Object.fromEntries([["iceberg",[["impl <a class=\"trait\" href=\"https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html\" title=\"trait serde_core::ser::Serialize\">Serialize</a> for <a class=\"enum\" href=\"iceberg/compression/enum.CompressionCodec.html\" title=\"enum iceberg::compression::CompressionCodec\">CompressionCodec</a>"],["impl <a class=\"trait\" href=\"https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html\" title=\"trait [...]
     if (window.register_implementors) {
         window.register_implementors(implementors);
     } else {
         window.pending_implementors = implementors;
     }
 })()
-//{"start":57,"fragment_lengths":[24758,5055,335,689]}
\ No newline at end of file
+//{"start":57,"fragment_lengths":[24758,5055,335,1414]}
\ No newline at end of file