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/10/15 23:07:48 UTC
(iceberg-rust) branch gh-pages updated: deploy: f83bec42298a1cf51a42ea2aee26c041a15db5b4
This is an automated email from the ASF dual-hosted git repository.
github-actions[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 663d7ed41 deploy: f83bec42298a1cf51a42ea2aee26c041a15db5b4
663d7ed41 is described below
commit 663d7ed41fb88551f6e37daba056fe2e5c3684bc
Author: github-merge-queue[bot] <gi...@users.noreply.github.com>
AuthorDate: Thu Oct 15 23:07:42 2026 +0000
deploy: f83bec42298a1cf51a42ea2aee26c041a15db5b4
---
api/iceberg/arrow/fn.arrow_schema_to_schema.html | 2 +-
.../fn.arrow_schema_to_schema_auto_assign_ids.html | 2 +-
api/iceberg/arrow/fn.arrow_type_to_type.html | 2 +-
.../arrow/fn.datum_to_arrow_type_with_ree.html | 2 +-
api/iceberg/arrow/fn.schema_to_arrow_schema.html | 2 +-
.../arrow/fn.strip_metadata_from_schema.html | 2 +-
api/iceberg/arrow/fn.type_to_arrow_type.html | 2 +-
api/iceberg/arrow/trait.ArrowSchemaVisitor.html | 14 +-
api/iceberg/spec/struct.Schema.html | 2 +-
api/search.index/0053bb75e6.js | 1 -
api/search.index/0086853182.js | 1 -
api/search.index/00f070da80.js | 1 -
api/search.index/010cde378c.js | 1 -
api/search.index/0160e9c012.js | 1 +
api/search.index/016ee53a83.js | 1 -
api/search.index/016f12dc9c.js | 1 +
api/search.index/01a6a36a50.js | 1 -
api/search.index/01c377b6c0.js | 1 +
api/search.index/01f6d3f3d8.js | 1 +
api/search.index/022b8dbc45.js | 1 -
api/search.index/023e21cd63.js | 1 +
api/search.index/02ca8d4849.js | 1 -
api/search.index/0326d2a7f7.js | 1 +
api/search.index/0328d148c3.js | 1 -
api/search.index/0341e2abb6.js | 1 -
api/search.index/034e527dcf.js | 1 -
api/search.index/0395442392.js | 1 +
api/search.index/03bfe31530.js | 1 +
api/search.index/03d5b025fe.js | 1 +
api/search.index/03d6026c2e.js | 1 -
api/search.index/03ed849e4a.js | 1 +
api/search.index/03f834c662.js | 1 +
api/search.index/0446c4b2bf.js | 1 -
api/search.index/047f58472e.js | 1 +
api/search.index/04bd7bcaa7.js | 1 +
api/search.index/05136324ac.js | 1 +
api/search.index/051d293a6b.js | 1 -
api/search.index/0569b01667.js | 1 +
api/search.index/05dd388c2c.js | 1 -
api/search.index/05e609bf3a.js | 1 -
api/search.index/0663d6d4c3.js | 1 +
api/search.index/069330267a.js | 1 -
api/search.index/06a343f387.js | 1 -
api/search.index/0721bad718.js | 1 +
api/search.index/0757a87726.js | 1 -
api/search.index/078e770e0d.js | 1 -
api/search.index/0792722944.js | 1 -
api/search.index/07a15402d9.js | 1 +
api/search.index/07b0a53a4e.js | 1 -
api/search.index/07e87a8d4e.js | 1 +
api/search.index/083243e371.js | 1 -
api/search.index/0867ddd40f.js | 1 +
api/search.index/087a57bd33.js | 1 -
api/search.index/08e14bcc6d.js | 1 -
api/search.index/0900155297.js | 1 +
api/search.index/0955750595.js | 1 -
api/search.index/099719029e.js | 1 +
api/search.index/09dc9c2888.js | 1 -
api/search.index/09e2f20fd7.js | 1 +
api/search.index/0a159c2ea3.js | 1 +
api/search.index/0a70ccccd8.js | 1 +
api/search.index/0a95c61e60.js | 1 +
api/search.index/0ae6f3693d.js | 1 +
api/search.index/0b1587ba24.js | 1 -
api/search.index/0b2de5f616.js | 1 -
api/search.index/0b52fef598.js | 1 -
api/search.index/0ba99331bf.js | 1 +
api/search.index/0bf6ab45c7.js | 1 -
api/search.index/0c18f61033.js | 1 +
api/search.index/0c3e3b0914.js | 1 +
api/search.index/0c3e5bb0bc.js | 1 -
api/search.index/0c50442343.js | 1 -
api/search.index/0c59d91d01.js | 1 -
api/search.index/0decb3f2ae.js | 1 +
api/search.index/0dee650ec7.js | 1 -
api/search.index/0e10706b7f.js | 1 -
api/search.index/0e17166e9e.js | 1 +
api/search.index/0e17bec233.js | 1 -
api/search.index/0e33e8d2af.js | 1 +
api/search.index/0eb35a4619.js | 1 +
api/search.index/0ec6ef947d.js | 1 -
api/search.index/0f4b4c588f.js | 1 -
api/search.index/0f50e33a1f.js | 1 +
api/search.index/0f54016848.js | 1 -
api/search.index/0f57a20414.js | 1 -
api/search.index/0f73bc1102.js | 1 +
api/search.index/0fd1b45272.js | 1 +
api/search.index/100d9ce7be.js | 1 +
api/search.index/104d1e155a.js | 1 -
api/search.index/10ad727b24.js | 1 +
api/search.index/11189f9fbf.js | 1 +
api/search.index/112722c481.js | 1 -
api/search.index/1137474c11.js | 1 -
api/search.index/1154ef8195.js | 1 +
api/search.index/117f6b997b.js | 1 -
api/search.index/11e40d3fbb.js | 1 -
api/search.index/1227a472fd.js | 1 -
api/search.index/123e00b523.js | 1 -
api/search.index/12a10d6aeb.js | 1 -
api/search.index/12d94319a1.js | 1 +
api/search.index/12e93f809a.js | 1 -
api/search.index/12efb77188.js | 1 +
api/search.index/134803e651.js | 1 -
api/search.index/136c9579cf.js | 1 +
api/search.index/13804e0a5e.js | 1 +
api/search.index/13dc1445e4.js | 1 +
api/search.index/13e149cdba.js | 1 +
api/search.index/140cb04cd3.js | 1 -
api/search.index/1443f1a312.js | 1 +
api/search.index/146adf1a3f.js | 1 +
api/search.index/14819f97e1.js | 1 +
api/search.index/14a38d9c22.js | 1 -
api/search.index/14bf5da809.js | 1 -
api/search.index/14d78ea2b6.js | 1 +
api/search.index/1549010b8f.js | 1 -
api/search.index/16a3fd0bc7.js | 1 +
api/search.index/16c431f301.js | 1 +
api/search.index/16e73ac158.js | 1 -
api/search.index/172ff8c312.js | 1 -
api/search.index/17b987dbb3.js | 1 -
api/search.index/184dadfdd0.js | 1 -
api/search.index/18775b4eb3.js | 1 -
api/search.index/18a815b780.js | 1 +
api/search.index/18fbd8cd19.js | 1 -
api/search.index/1947f82db6.js | 1 -
api/search.index/195f7e480d.js | 1 -
api/search.index/19cb701cce.js | 1 +
api/search.index/19e829c837.js | 1 +
api/search.index/1a0392cc35.js | 1 +
api/search.index/1aac07067f.js | 1 +
api/search.index/1b0242b04a.js | 1 +
api/search.index/1b54fe0ca3.js | 1 -
api/search.index/1b8494a41a.js | 1 +
api/search.index/1b87352835.js | 1 -
api/search.index/1bd9cc697f.js | 1 +
api/search.index/1c13c85a7d.js | 1 +
api/search.index/1c150ad227.js | 1 +
api/search.index/1c77cdf2ad.js | 1 -
api/search.index/1c87074b0a.js | 1 -
api/search.index/1d35e59d01.js | 1 -
api/search.index/1d4f5e7b6e.js | 1 -
api/search.index/1d55f28699.js | 1 -
api/search.index/1d7da1fdce.js | 1 -
api/search.index/1d9d759cf2.js | 1 -
api/search.index/1e0d996660.js | 1 +
api/search.index/1e4ed3cdaf.js | 1 -
api/search.index/1ea0c049dd.js | 1 -
api/search.index/1f4646083c.js | 1 -
api/search.index/1fc8cdbf95.js | 1 -
api/search.index/1fe25f46f2.js | 1 +
api/search.index/1fedb8f0e2.js | 1 -
api/search.index/2046bd8223.js | 1 -
api/search.index/20f394eba0.js | 1 -
api/search.index/2126c8bb24.js | 1 -
api/search.index/213fa525bf.js | 1 -
api/search.index/2181d328c8.js | 1 +
api/search.index/21a77c9df9.js | 1 +
api/search.index/22266a710e.js | 1 -
api/search.index/226e624177.js | 1 +
api/search.index/22ff7fb000.js | 1 -
api/search.index/235b1f56fe.js | 1 -
api/search.index/237bb139b9.js | 1 +
api/search.index/23a5b23851.js | 1 +
api/search.index/23abcbb4d0.js | 1 +
api/search.index/23d7093e70.js | 1 -
api/search.index/23dc800960.js | 1 +
api/search.index/23e3afe498.js | 1 -
api/search.index/24605391e6.js | 1 +
api/search.index/246d0f9320.js | 1 -
api/search.index/24b560cdfc.js | 1 +
api/search.index/24bceb3a7e.js | 1 -
api/search.index/24f8a724ba.js | 1 -
api/search.index/250af5e322.js | 1 +
api/search.index/250b4b9bde.js | 1 -
api/search.index/25f5ef22a3.js | 1 -
api/search.index/2601688a5a.js | 1 -
api/search.index/2604c666e9.js | 1 -
api/search.index/264d09a621.js | 1 +
api/search.index/265c3a7d7d.js | 1 +
api/search.index/268166f349.js | 1 -
api/search.index/26b8a6594a.js | 1 +
api/search.index/26ea17d3f6.js | 1 -
api/search.index/2797b82063.js | 1 +
api/search.index/27b875d96d.js | 1 -
api/search.index/27bfe309d0.js | 1 -
api/search.index/2812301b6f.js | 1 -
api/search.index/28403c31a9.js | 1 -
api/search.index/286fbd80e7.js | 1 -
api/search.index/289ef87651.js | 1 -
api/search.index/28a571ad86.js | 1 -
api/search.index/28b3c5e079.js | 1 -
api/search.index/29291cabe5.js | 1 -
api/search.index/2943772a38.js | 1 +
api/search.index/294ea7cd0d.js | 1 +
api/search.index/299f31ea2e.js | 1 +
api/search.index/2a0fb89a82.js | 1 +
api/search.index/2a4a3bc0a3.js | 1 -
api/search.index/2a6c41d1d6.js | 1 -
api/search.index/2a822293a4.js | 1 +
api/search.index/2a84b189b0.js | 1 -
api/search.index/2a95701c1c.js | 1 -
api/search.index/2a99e9ddb5.js | 1 +
api/search.index/2b131468cd.js | 1 +
api/search.index/2b1ce4b440.js | 1 -
api/search.index/2b2f13be6e.js | 1 +
api/search.index/2b4624d926.js | 1 +
api/search.index/2b9b9d9c27.js | 1 -
api/search.index/2bccfe8dd7.js | 1 +
api/search.index/2beca1254e.js | 1 +
api/search.index/2c8450799b.js | 1 +
api/search.index/2d09a11260.js | 1 +
api/search.index/2d37caf80a.js | 1 +
api/search.index/2d532942c4.js | 1 -
api/search.index/2d5a85d722.js | 1 -
api/search.index/2d78d4f11e.js | 1 -
api/search.index/2da4e86f6f.js | 1 +
api/search.index/2db3284521.js | 1 -
api/search.index/2dece94a57.js | 1 -
api/search.index/2df33f1ebc.js | 1 +
api/search.index/2e2af8cd75.js | 1 +
api/search.index/2f1dad419a.js | 1 -
api/search.index/2f294c01c3.js | 1 -
api/search.index/2f34579b44.js | 1 +
api/search.index/2f5efb6995.js | 1 -
api/search.index/2faaa7842b.js | 1 +
api/search.index/30911a1c00.js | 1 +
api/search.index/30a7b63b08.js | 1 -
api/search.index/310fcb1e8f.js | 1 +
api/search.index/313af57917.js | 1 -
api/search.index/3178b11181.js | 1 +
api/search.index/31da8f63d7.js | 1 +
api/search.index/31e34e5b6a.js | 1 -
api/search.index/323cffaf30.js | 1 -
api/search.index/3242a84a40.js | 1 -
api/search.index/324ebb675b.js | 1 -
api/search.index/32722777f2.js | 1 -
api/search.index/32a8a067eb.js | 1 +
api/search.index/33252c3817.js | 1 +
api/search.index/332f7f92dd.js | 1 -
api/search.index/33857042e3.js | 1 +
api/search.index/33bcd15aa9.js | 1 +
api/search.index/33df51526b.js | 1 -
api/search.index/3405e4a6a5.js | 1 -
api/search.index/350e1f6c83.js | 1 +
api/search.index/35172f9a3c.js | 1 +
api/search.index/353cefed76.js | 1 +
api/search.index/3586f113d6.js | 1 +
api/search.index/35faaf1e77.js | 1 +
api/search.index/36a3a88217.js | 1 +
api/search.index/36a6070d82.js | 1 -
api/search.index/3748602705.js | 1 -
api/search.index/378bff2293.js | 1 +
api/search.index/37a0e8a260.js | 1 -
api/search.index/37ffc34210.js | 1 -
api/search.index/3873f76718.js | 1 +
api/search.index/38a34909fa.js | 1 -
api/search.index/38dd2455dd.js | 1 +
api/search.index/38e6145b0e.js | 1 +
api/search.index/39032e28d9.js | 1 +
api/search.index/391c5b1846.js | 1 -
api/search.index/39331e292d.js | 1 +
api/search.index/397a828ab5.js | 1 +
api/search.index/3a0eeaec31.js | 1 +
api/search.index/3a652b4ea4.js | 1 -
api/search.index/3aedafcb85.js | 1 -
api/search.index/3b31c37037.js | 1 -
api/search.index/3b4f3d56ce.js | 1 -
api/search.index/3b9b49235e.js | 1 +
api/search.index/3bab5afe9e.js | 1 +
api/search.index/3bb42312c3.js | 1 +
api/search.index/3c14729dd9.js | 1 +
api/search.index/3c82933202.js | 1 +
api/search.index/3d36ed2922.js | 1 +
api/search.index/3e75cc8ce6.js | 1 -
api/search.index/3ebb893a6b.js | 1 +
api/search.index/3edf64063f.js | 1 +
api/search.index/3ef5f1b607.js | 1 +
api/search.index/3f41dc13df.js | 1 +
api/search.index/3f4c465475.js | 1 -
api/search.index/3f7c3ceedd.js | 1 +
api/search.index/400d465d84.js | 1 +
api/search.index/401137595b.js | 1 +
api/search.index/410354f582.js | 1 +
api/search.index/410bcf5052.js | 1 +
api/search.index/411a9b4906.js | 1 -
api/search.index/41a78134bb.js | 1 -
api/search.index/41fdb873cd.js | 1 +
api/search.index/4219ec4c5b.js | 1 -
api/search.index/42d6a3d3ba.js | 1 -
api/search.index/42fd521392.js | 1 -
api/search.index/4399f1cbf8.js | 1 +
api/search.index/43a806ac52.js | 1 +
api/search.index/43acb7851e.js | 1 -
api/search.index/440cb03834.js | 1 +
api/search.index/4498fd7561.js | 1 +
api/search.index/44dda198e5.js | 1 +
api/search.index/453c5f57a3.js | 1 +
api/search.index/4540ebd2e5.js | 1 -
api/search.index/458c2488aa.js | 1 +
api/search.index/45eaf9334c.js | 1 -
api/search.index/45f28fc7c6.js | 1 -
api/search.index/46c1ec4b3f.js | 1 -
api/search.index/470a416d9a.js | 1 +
api/search.index/471af4801a.js | 1 -
api/search.index/47ce4c4310.js | 1 -
api/search.index/47fc01807c.js | 1 -
api/search.index/480f88e766.js | 1 -
api/search.index/4839faf7ed.js | 1 -
api/search.index/48506b6877.js | 1 +
api/search.index/4852a4af1c.js | 1 -
api/search.index/488666e5d2.js | 1 -
api/search.index/48ab820650.js | 1 -
api/search.index/48fba0a0ab.js | 1 -
api/search.index/49205f07dd.js | 1 -
api/search.index/4a1d302c10.js | 1 +
api/search.index/4a65e637bc.js | 1 +
api/search.index/4a89e70a68.js | 1 +
api/search.index/4a96ea38d4.js | 1 -
api/search.index/4acc4a8682.js | 1 +
api/search.index/4ada2203f6.js | 1 +
api/search.index/4b3ba3dbf9.js | 1 +
api/search.index/4b7a606aff.js | 1 -
api/search.index/4b950f79a1.js | 1 +
api/search.index/4c1bd7efc1.js | 1 -
api/search.index/4cd10d608f.js | 1 -
api/search.index/4d8b807768.js | 1 +
api/search.index/4db7e33c0e.js | 1 -
api/search.index/4dec245c46.js | 1 +
api/search.index/4e0cc3693e.js | 1 -
api/search.index/4e1ca32ba8.js | 1 -
api/search.index/4e58755016.js | 1 +
api/search.index/4e7655f08a.js | 1 +
api/search.index/4e7893a101.js | 1 -
api/search.index/4e9b2ffbf7.js | 1 -
api/search.index/4f0cb84fa6.js | 1 -
api/search.index/4f1125e741.js | 1 -
api/search.index/4f60528ef3.js | 1 +
api/search.index/4f8743bf3a.js | 1 +
api/search.index/4fde30fff1.js | 1 +
api/search.index/50176be01b.js | 1 +
api/search.index/5028f39ef8.js | 1 -
api/search.index/5095cf32bc.js | 1 +
api/search.index/50dc77228a.js | 1 +
api/search.index/50f70fe58a.js | 1 -
api/search.index/5160fd7f53.js | 1 +
api/search.index/518b58a5d1.js | 1 +
api/search.index/529b80ec5d.js | 1 -
api/search.index/52b95c8022.js | 1 -
api/search.index/52bab07dba.js | 1 +
api/search.index/52c10e7a26.js | 1 -
api/search.index/52ca9c28e3.js | 1 +
api/search.index/530ef5a175.js | 1 +
api/search.index/531d9709f9.js | 1 +
api/search.index/534416c0cc.js | 1 +
api/search.index/534c757dbe.js | 1 +
api/search.index/535f5756ae.js | 1 +
api/search.index/5364c4af94.js | 1 -
api/search.index/538a2017fc.js | 1 -
api/search.index/5399f7a451.js | 1 +
api/search.index/541beeeff3.js | 1 -
api/search.index/542e55ad4b.js | 1 +
api/search.index/54a6e03bc4.js | 1 +
api/search.index/54bd6536fb.js | 1 +
api/search.index/54cb2e4fb7.js | 1 -
api/search.index/5502b48a1a.js | 1 +
api/search.index/556d39adc4.js | 1 -
api/search.index/55848c9daf.js | 1 +
api/search.index/55882d0e3a.js | 1 -
api/search.index/55a7daa610.js | 1 -
api/search.index/55ae141626.js | 1 +
api/search.index/560648e8e8.js | 1 +
api/search.index/56692742f3.js | 1 +
api/search.index/5680ee9af7.js | 1 +
api/search.index/56b611c5b6.js | 1 -
api/search.index/56e973b4a5.js | 1 -
api/search.index/57872d76ba.js | 1 +
api/search.index/57999c69f5.js | 1 +
api/search.index/57acc90c7d.js | 1 +
api/search.index/57af0064a4.js | 1 -
api/search.index/57b5d909c8.js | 1 -
api/search.index/57dcb86383.js | 1 +
api/search.index/5802578e85.js | 1 -
api/search.index/58115f7fbf.js | 1 -
api/search.index/5852e17b92.js | 1 +
api/search.index/58a7393f71.js | 1 -
api/search.index/58e206cabf.js | 1 +
api/search.index/5913754675.js | 1 -
api/search.index/595614cea9.js | 1 +
api/search.index/595b49116e.js | 1 -
api/search.index/5992ef4ed1.js | 1 -
api/search.index/59a3010d86.js | 1 +
api/search.index/59cef0762e.js | 1 +
api/search.index/5a47474d3e.js | 1 +
api/search.index/5a47db67ab.js | 1 -
api/search.index/5a5aa04912.js | 1 -
api/search.index/5abde0940c.js | 1 -
api/search.index/5ac64753d9.js | 1 +
api/search.index/5b145af890.js | 1 -
api/search.index/5b21545cac.js | 1 -
api/search.index/5b7400f445.js | 1 +
api/search.index/5bcbe63efc.js | 1 -
api/search.index/5bddd2c851.js | 1 +
api/search.index/5bfc6d5990.js | 1 -
api/search.index/5bfd1e5cc1.js | 1 -
api/search.index/5c2a29532b.js | 1 +
api/search.index/5c3c32db9b.js | 1 +
api/search.index/5d8b04dd9d.js | 1 +
api/search.index/5e5eddc241.js | 1 -
api/search.index/5ec9b00e9c.js | 1 -
api/search.index/5f3d75831a.js | 1 +
api/search.index/5f685a22d6.js | 1 +
api/search.index/5f9e607596.js | 1 -
api/search.index/5fc7ad2700.js | 1 +
api/search.index/60218c27d9.js | 1 +
api/search.index/606b13f11b.js | 1 +
api/search.index/6090928eeb.js | 1 -
api/search.index/60bc7597f9.js | 1 +
api/search.index/611726591c.js | 1 -
api/search.index/618a516f47.js | 1 -
api/search.index/61ad5bad3c.js | 1 +
api/search.index/61b61e177f.js | 1 +
api/search.index/6216191242.js | 1 -
api/search.index/622f4b01db.js | 1 -
api/search.index/623c25c0a4.js | 1 -
api/search.index/623d1a1e3b.js | 1 -
api/search.index/624d1fa190.js | 1 +
api/search.index/62c1cdc854.js | 1 +
api/search.index/62e3e46e4c.js | 1 +
api/search.index/62f3748cc2.js | 1 +
api/search.index/63eece7a19.js | 1 -
api/search.index/6426302fa6.js | 1 -
api/search.index/64a6fbd458.js | 1 +
api/search.index/64b2aceaf2.js | 1 -
api/search.index/653d4ad6cc.js | 1 -
api/search.index/654fd828ef.js | 1 +
api/search.index/655d487b78.js | 1 +
api/search.index/656aace04b.js | 1 +
api/search.index/658cdacd13.js | 1 -
api/search.index/66605bfbaa.js | 1 -
api/search.index/669daf9dd7.js | 1 -
api/search.index/66bf2a153d.js | 1 +
api/search.index/66ca300d9c.js | 1 +
api/search.index/66dedab954.js | 1 -
api/search.index/66df9be29d.js | 1 -
api/search.index/673d09bac9.js | 1 +
api/search.index/6744cb10c1.js | 1 +
api/search.index/675e7048cc.js | 1 +
api/search.index/678d5ff199.js | 1 +
api/search.index/67d5df3e64.js | 1 +
api/search.index/68b8008be4.js | 1 +
api/search.index/691be0b9ba.js | 1 -
api/search.index/693c16ca69.js | 1 -
api/search.index/697280d816.js | 1 -
api/search.index/6996e99e56.js | 1 -
api/search.index/69b375c363.js | 1 +
api/search.index/69d4ba470f.js | 1 +
api/search.index/69e8c3a44e.js | 1 +
api/search.index/69fa4d98bb.js | 1 +
api/search.index/6a6b91bf97.js | 1 +
api/search.index/6aaa34045a.js | 1 -
api/search.index/6abf01b304.js | 1 -
api/search.index/6ae9fa157b.js | 1 +
api/search.index/6b07abef9d.js | 1 +
api/search.index/6b2818cfd5.js | 1 -
api/search.index/6b6d78aab7.js | 1 -
api/search.index/6bc00b82da.js | 1 -
api/search.index/6bc895d2cf.js | 1 +
api/search.index/6bd0e4e6d4.js | 1 -
api/search.index/6c30f830fb.js | 1 +
api/search.index/6c6961a558.js | 1 +
api/search.index/6c9cbc058d.js | 1 -
api/search.index/6ca82cb0c3.js | 1 +
api/search.index/6ceffd1e5e.js | 1 -
api/search.index/6cf0804685.js | 1 +
api/search.index/6cfc410d8b.js | 1 +
api/search.index/6d167f6bee.js | 1 -
api/search.index/6d24fa1c05.js | 1 +
api/search.index/6d5153a571.js | 1 +
api/search.index/6d657562ab.js | 1 -
api/search.index/6d74ef77df.js | 1 +
api/search.index/6d8af494d3.js | 1 -
api/search.index/6d8e9d0664.js | 1 -
api/search.index/6d93a4e07a.js | 1 +
api/search.index/6e1bcb3630.js | 1 +
api/search.index/6e5f106061.js | 1 -
api/search.index/6e8f6484ea.js | 1 +
api/search.index/6eaa5d8fcd.js | 1 +
api/search.index/6ee482c942.js | 1 -
api/search.index/6f62dd80b7.js | 1 -
api/search.index/6f69cc19c6.js | 1 +
api/search.index/6f70589b7b.js | 1 +
api/search.index/7031cd07a5.js | 1 -
api/search.index/703e065a6e.js | 1 -
api/search.index/705a3c1d80.js | 1 -
api/search.index/705ff85fb2.js | 1 -
api/search.index/7076a0a234.js | 1 +
api/search.index/71124000d3.js | 1 -
api/search.index/716b27fcb3.js | 1 +
api/search.index/7180c325f6.js | 1 +
api/search.index/7219522374.js | 1 -
api/search.index/72268e9eda.js | 1 -
api/search.index/725d5d5a36.js | 1 +
api/search.index/726db216da.js | 1 -
api/search.index/7311c6f0c4.js | 1 +
api/search.index/732093d156.js | 1 -
api/search.index/7369b134d3.js | 1 -
api/search.index/73de37428a.js | 1 +
api/search.index/73f942d5f3.js | 1 -
api/search.index/741bde3c4d.js | 1 -
api/search.index/74657e726c.js | 1 +
api/search.index/74cb3d46fc.js | 1 +
api/search.index/74dceee5b4.js | 1 +
api/search.index/754c1412c6.js | 1 -
api/search.index/7579c2d106.js | 1 +
api/search.index/761d02d980.js | 1 -
api/search.index/7665ee5397.js | 1 +
api/search.index/76991beaf0.js | 1 +
api/search.index/76a194d7c1.js | 1 +
api/search.index/76d6c9b3d0.js | 1 -
api/search.index/7763a881d0.js | 1 +
api/search.index/7764859d86.js | 1 +
api/search.index/777d2275c2.js | 1 -
api/search.index/778fd1bf97.js | 1 +
api/search.index/77a90466fc.js | 1 +
api/search.index/77bd224d45.js | 1 -
api/search.index/77e289ff40.js | 1 +
api/search.index/77ed74eba7.js | 1 +
api/search.index/7857542935.js | 1 -
api/search.index/78a53b31ca.js | 1 -
api/search.index/78ed0e37e2.js | 1 -
api/search.index/79012f8769.js | 1 +
api/search.index/79344cf753.js | 1 -
api/search.index/7958fcf126.js | 1 -
api/search.index/79e56de280.js | 1 +
api/search.index/7a0cb5e354.js | 1 -
api/search.index/7a5316af21.js | 1 -
api/search.index/7ae77ae57d.js | 1 -
api/search.index/7af2e682b3.js | 1 +
api/search.index/7b03e987b5.js | 1 -
api/search.index/7b30feeee3.js | 1 -
api/search.index/7b751cf359.js | 1 +
api/search.index/7bdfc5928c.js | 1 -
api/search.index/7bed97b412.js | 1 -
api/search.index/7bfaef2214.js | 1 -
api/search.index/7c09e36592.js | 1 +
api/search.index/7ce2f5f493.js | 1 -
api/search.index/7cf59ea47a.js | 1 +
api/search.index/7cf98ff8af.js | 1 -
api/search.index/7d53c5167f.js | 1 +
api/search.index/7d649affd2.js | 1 -
api/search.index/7d9a27d56a.js | 1 +
api/search.index/7daa893b40.js | 1 -
api/search.index/7e01f4b18f.js | 1 +
api/search.index/7e19c16e7b.js | 1 +
api/search.index/7e70839451.js | 1 +
api/search.index/7f3c813f51.js | 1 +
api/search.index/7f463eb22a.js | 1 -
api/search.index/desc/9f972a52f4.js | 1 -
api/search.index/desc/b22a42340f.js | 1 +
api/search.index/entry/4b82128286.js | 1 -
api/search.index/entry/6e7469700f.js | 1 -
api/search.index/entry/b36f1bba39.js | 1 +
api/search.index/entry/c710b1b327.js | 1 +
api/search.index/entry/dd8426dce6.js | 1 -
api/search.index/entry/e7bb703341.js | 1 +
api/search.index/function/69d32cb80e.js | 1 -
api/search.index/function/95f07a49e8.js | 1 +
api/search.index/function/d31af4a1e6.js | 1 +
api/search.index/function/fae82ce647.js | 1 -
.../generic_inverted_index/adc16a4e1b.js | 1 -
.../generic_inverted_index/f60e13f812.js | 1 +
api/search.index/name/d803ffc870.js | 1 +
api/search.index/name/fd0ff35b8f.js | 1 -
api/search.index/normalizedName/76ec0b5fa0.js | 1 +
api/search.index/normalizedName/992720dc21.js | 1 -
api/search.index/root.js | 2 +-
api/search.index/type/2983f86188.js | 1 +
api/search.index/type/8a6159c54a.js | 1 -
api/src/iceberg/arrow/schema.rs.html | 5671 ++++++++++----------
.../writer/file_writer/parquet_writer.rs.html | 617 ++-
580 files changed, 3569 insertions(+), 3319 deletions(-)
diff --git a/api/iceberg/arrow/fn.arrow_schema_to_schema.html b/api/iceberg/arrow/fn.arrow_schema_to_schema.html
index a9ebd4ede..58ed13f04 100644
--- a/api/iceberg/arrow/fn.arrow_schema_to_schema.html
+++ b/api/iceberg/arrow/fn.arrow_schema_to_schema.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="Convert Arrow schema to Iceberg schema."><title>arrow_schema_to_schema in iceberg::arrow - 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="Convert Arrow schema to Iceberg schema."><title>arrow_schema_to_schema in iceberg::arrow - 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>Iceberg schema fields require a unique field id, and this function assumes that each field
in the provided Arrow schema contains a field id in its metadata. If the metadata is missing
or the field id is not set, the conversion will fail</p>
diff --git a/api/iceberg/arrow/fn.arrow_schema_to_schema_auto_assign_ids.html b/api/iceberg/arrow/fn.arrow_schema_to_schema_auto_assign_ids.html
index 0a1c4137a..dfc87e4f9 100644
--- a/api/iceberg/arrow/fn.arrow_schema_to_schema_auto_assign_ids.html
+++ b/api/iceberg/arrow/fn.arrow_schema_to_schema_auto_assign_ids.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="Convert Arrow schema to Iceberg schema with automatically assigned field IDs."><title>arrow_schema_to_schema_auto_assign_ids in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2 [...]
+<!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="Convert Arrow schema to Iceberg schema with automatically assigned field IDs."><title>arrow_schema_to_schema_auto_assign_ids in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2 [...]
<p>Unlike <a href="fn.arrow_schema_to_schema.html" title="fn iceberg::arrow::arrow_schema_to_schema"><code>arrow_schema_to_schema</code></a>, this function does not require field IDs in the Arrow
schema metadata. Instead, it automatically assigns unique field IDs starting from 1,
following Iceberg’s field ID assignment rules.</p>
diff --git a/api/iceberg/arrow/fn.arrow_type_to_type.html b/api/iceberg/arrow/fn.arrow_type_to_type.html
index 0002ec768..fc3ce4031 100644
--- a/api/iceberg/arrow/fn.arrow_type_to_type.html
+++ b/api/iceberg/arrow/fn.arrow_type_to_type.html
@@ -1,2 +1,2 @@
-<!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="Convert Arrow type to iceberg type."><title>arrow_type_to_type in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff [...]
+<!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="Convert Arrow type to iceberg type."><title>arrow_type_to_type in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.woff [...]
</div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/arrow/fn.datum_to_arrow_type_with_ree.html b/api/iceberg/arrow/fn.datum_to_arrow_type_with_ree.html
index 713243544..919d935c9 100644
--- a/api/iceberg/arrow/fn.datum_to_arrow_type_with_ree.html
+++ b/api/iceberg/arrow/fn.datum_to_arrow_type_with_ree.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="Converts a Datum (Iceberg type + primitive literal) to its corresponding Arrow DataType with Run-End Encoding (REE)."><title>datum_to_arrow_type_with_ree in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSeri [...]
+<!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="Converts a Datum (Iceberg type + primitive literal) to its corresponding Arrow DataType with Run-End Encoding (REE)."><title>datum_to_arrow_type_with_ree in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSeri [...]
with Run-End Encoding (REE).</p>
<p>This function is used for constant fields in record batches, where all values are the same.
Run-End Encoding provides efficient storage for such constant columns.</p>
diff --git a/api/iceberg/arrow/fn.schema_to_arrow_schema.html b/api/iceberg/arrow/fn.schema_to_arrow_schema.html
index dcf645241..12912443f 100644
--- a/api/iceberg/arrow/fn.schema_to_arrow_schema.html
+++ b/api/iceberg/arrow/fn.schema_to_arrow_schema.html
@@ -1,2 +1,2 @@
-<!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="Convert iceberg schema to an arrow schema."><title>schema_to_arrow_schema in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0f [...]
+<!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="Convert iceberg schema to an arrow schema."><title>schema_to_arrow_schema in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0f [...]
</div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/arrow/fn.strip_metadata_from_schema.html b/api/iceberg/arrow/fn.strip_metadata_from_schema.html
index 4dbbf8d23..952fa2690 100644
--- a/api/iceberg/arrow/fn.strip_metadata_from_schema.html
+++ b/api/iceberg/arrow/fn.strip_metadata_from_schema.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="Strips all metadata from an Arrow schema and its nested fields."><title>strip_metadata_from_schema in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de. [...]
+<!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="Strips all metadata from an Arrow schema and its nested fields."><title>strip_metadata_from_schema in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de. [...]
<p>This function recursively removes metadata from all fields at every level of the schema,
including nested struct, list, and map fields. This is useful for schema comparison
where metadata differences should be ignored.</p>
diff --git a/api/iceberg/arrow/fn.type_to_arrow_type.html b/api/iceberg/arrow/fn.type_to_arrow_type.html
index 47174993b..a0784fe4f 100644
--- a/api/iceberg/arrow/fn.type_to_arrow_type.html
+++ b/api/iceberg/arrow/fn.type_to_arrow_type.html
@@ -1,2 +1,2 @@
-<!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="Convert iceberg type to an arrow type."><title>type_to_arrow_type in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.w [...]
+<!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="Convert iceberg type to an arrow type."><title>type_to_arrow_type in iceberg::arrow - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Italic-81dc35de.woff2,FiraSans-Regular-0fe48ade.w [...]
</div></details></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/arrow/trait.ArrowSchemaVisitor.html b/api/iceberg/arrow/trait.ArrowSchemaVisitor.html
index cbfd429b5..f9bac0871 100644
--- a/api/iceberg/arrow/trait.ArrowSchemaVisitor.html
+++ b/api/iceberg/arrow/trait.ArrowSchemaVisitor.html
@@ -1,8 +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="A post order arrow schema visitor."><title>ArrowSchemaVisitor in iceberg::arrow - 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 [...]
+<!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 post order arrow schema visitor."><title>ArrowSchemaVisitor in iceberg::arrow - 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 [...]
type <a href="#associatedtype.T" class="associatedtype">T</a>;
type <a href="#associatedtype.U" class="associatedtype">U</a>;
-<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 14 methods</span></summary> // Required methods
+<details class="toggle type-contents-toggle"><summary class="hideme"><span>Show 15 methods</span></summary> // Required methods
fn <a href="#tymethod.schema" class="fn">schema</a>(
&mut self,
schema: &ArrowSchema,
@@ -33,6 +33,8 @@
<span class="item-spacer"></span> fn <a href="#method.after_map_value" class="fn">after_map_value</a>(&mut self, _field: &FieldRef) -> <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a><<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>> { ... }
<span class="item-spacer"></span> fn <a href="#method.variant" class="fn">variant</a>(&mut self, field: &FieldRef) -> <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a><Self::<a class="associatedtype" href="trait.ArrowSchemaVisitor.html#associatedtype.T" title="type iceberg::arrow::ArrowSchemaVisitor::T">T</a>>
<span class="where">where Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a></span> { ... }
+<span class="item-spacer"></span> fn <a href="#method.uuid" class="fn">uuid</a>(&mut self, field: &FieldRef) -> <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a><Self::<a class="associatedtype" href="trait.ArrowSchemaVisitor.html#associatedtype.T" title="type iceberg::arrow::ArrowSchemaVisitor::T">T</a>>
+ <span class="where">where Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a></span> { ... }
</details>}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>A post order arrow schema visitor.</p>
<p>For order of methods called, please refer to the internal <code>visit_schema</code> function.</p>
</div></details><h2 id="required-associated-types" class="section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.T" class="method"><a class="src rightside" href="../../src/iceberg/arrow/schema.rs.html#109">Source</a><h4 class="code-header">type <a href="#associatedtype.T" class="associatedtype">T</a></h4></section></summary><div class="docblock"><p>Return [...]
@@ -72,4 +74,12 @@ needs variant identity) should override this to fold the struct into a
single logical variant.</p>
<p>Takes the <code>&FieldRef</code> rather than a <code>&DataType</code> because the variant signal
lives on the field’s metadata, not on its data type.</p>
+</div></details><details class="toggle method-toggle" open><summary><section id="method.uuid" class="method"><a class="src rightside" href="../../src/iceberg/arrow/schema.rs.html#197-200">Source</a><h4 class="code-header">fn <a href="#method.uuid" class="fn">uuid</a>(&mut self, field: &FieldRef) -> <a class="type" href="../type.Result.html" title="type iceberg::Result">Result</a><Self::<a class="associatedtype" href="trait.ArrowSchemaVisitor.html#associatedtype.T" title="ty [...]
+ Self: <a class="trait" href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>,</div></h4></section></summary><div class="docblock"><p>Called when a field carries the <code>arrow.uuid</code> extension type.</p>
+<p>The default treats the field as its underlying Arrow storage, preserving
+the behavior of visitors that don’t special-case UUIDs. A visitor that
+produces Iceberg types should override this to fold the storage into a
+single logical UUID.</p>
+<p>Takes the <code>&FieldRef</code> rather than a <code>&DataType</code> because the UUID signal
+lives on the field’s metadata, not on its data type.</p>
</div></details></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"></div><script src="../../trait.impl/iceberg/arrow/schema/trait.ArrowSchemaVisitor.js" async></script></section></div></main></body></html>
\ No newline at end of file
diff --git a/api/iceberg/spec/struct.Schema.html b/api/iceberg/spec/struct.Schema.html
index 3a30134c0..896d0d478 100644
--- a/api/iceberg/spec/struct.Schema.html
+++ b/api/iceberg/spec/struct.Schema.html
@@ -49,7 +49,7 @@ checked, as it only affects newly written rows (read identically at any version)
</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-Schema" class="impl"><a class="src rightside" href="../../src/iceberg/spec/schema/mod.rs.html#65">Source</a><a href="#impl-Clone-for-Schema" class="anchor">§</a><h3 class="code-header">impl <a class [...]
__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><'de>,</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 [...]
and should not be overridden without very good reason.</div></details></div></details><details class="toggle implementors-toggle" open><summary><section id="impl-Serialize-for-Schema" class="impl"><a class="src rightside" href="../../src/iceberg/spec/schema/mod.rs.html#65">Source</a><a href="#impl-Serialize-for-Schema" class="anchor">§</a><h3 class="code-header">impl <a class="trait" href="https://docs.rs/serde_core/1.0.228/serde_core/ser/trait.Serialize.html" title="trait serde_core::se [...]
- __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-Tr [...]
+ __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-Tr [...]
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#142">Source</a><a href="#method.type_id" class="anchor">§</a><h4 class="code-header">fn <a href [...]
T: CastFrom<U>,</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><T as As>::as_::<U></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>(&self) -> &(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/0053bb75e6.js b/api/search.index/0053bb75e6.js
deleted file mode 100644
index 535bd39ae..000000000
--- a/api/search.index/0053bb75e6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQHAAAAz/BupHUQidDccOBx5HHocIcIAAAYgjCLzA5DqaRAAAIUQAADUGgAA4BoAAPUbAADUHgAAcB8AAKcfAADeHwAAAyIAABIiAAAFAAEQARAVAsMAABZFIhLLIWJyJCEjhwLDAAAhdWZzOwPGAAAdMmFvciHBAACrFqscBcDABIQAABjcHSGEE6EWGR8gFQHEAAAQMSBzxB9BwAAA1Am+C78LeR+hxQAAriEVAcAAABStIWPIHRUByQAAFm8iYu0h84PCCECrxAQhxwAAIHXCAAATqCUBygAAFrwiZC8ilSIFAsEAABLrGhqDIGFrpQHGAACmayFmRB0VAc8AABZkImbDIcMA/QQBA8oAACB8yQAAIWkBziEAAOvAAqHDAAAe1vcLAP0xiQfHAAAdM8IAABOIOzAAAAEAABIBEwCbAQIAvwH1AA4FAAAiBQAALgUHAFUJAAC7CQEA7QsAACIMAACMEwAAlRMAAGQ [...]
\ No newline at end of file
diff --git a/api/search.index/0086853182.js b/api/search.index/0086853182.js
deleted file mode 100644
index c8d079315..000000000
--- a/api/search.index/0086853182.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcEAAG8QmxAxwQAA9hS7H7wfAQEBxAAAHKto47wOAABPDwAAaRwAAIMcAAAiCcUCwwAAJz4hHiIQcRtmc4EaYcAAAH4TvhNvFcQWKx0tHWUDwAAAFg8gEwsfExQhYmlqzRoDGyAgISADIQchpYLDAAAhACIgIi0iYwEDwQAAIFhpbHP5nxYAAAEAtgI8AzAC8wAEAAUApQDfB/0tUATCAAAcBA==")
\ No newline at end of file
diff --git a/api/search.index/00f070da80.js b/api/search.index/00f070da80.js
deleted file mode 100644
index 717e2791a..000000000
--- a/api/search.index/00f070da80.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHFAAAV/CFyACAlAcMAABauImRnHW0i+4ZBxwAAvx+OIY8hDiIBBgLEAAAiJ8gAACJiYXLmmRwAAHwdAADBHwAAaCAAACYhAAC6IQAAxSEAAAYAMgAhxgAAYCGaIqMAwQaAywAAIizBAAATjuVnGwAANx0AAA0fAAAqIgAATyIAAJQiAAAwAAAVAsAAAOLHHOTUHWt2kRMVAcsAAKhoIncCIfvAAIlzAP0hSADCAAAWpOckBQAAkwkAAIgTAACzEwAA6hQAAJgVAAA9IAAAlSAAAAMABgA=")
\ No newline at end of file
diff --git a/api/search.index/010cde378c.js b/api/search.index/010cde378c.js
deleted file mode 100644
index 62ca20eb3..000000000
--- a/api/search.index/010cde378c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQPAAAAViCEeECIomCDBIWVpbaHFAADvGhWEwwAAE2ghsB8FAsMAABqMIh2pImV0IwQCxQAAIZlicAHLHQAAFQHAAAAW8h5isBPzgQJudBMAAsYAACAZY3LhmhsAAPkhAACABQLAAAAUdCASwx1wdQWGwQAAQg0gDiAkIB0hpvAe84ECcXNRyQAAzR2RH5IffyHYIQUCxAAAISMhtyEV8yFlchMHAsEAAB7vYnLhuxwAAK4dAAAQocQAAL4WAUSJXhwAACHJAAA2Ickh+wJjeEHGAAA+IpwiwSLIIiMAAsEAAB6KYWTqgBoAAP4aAAB9IAAAHCIAADkiAABRIgAAWiIAAHUiAAB+IgAAoCIAALEiAAAAARAAEAAxxgAAuRy6HPcgBQLAAACj7RpHliCXIJohwCFtbmsDwgAAHPFhb3IFAsEAACaKIakiFP0bY2kBAP7AZ6wPywAAICkuPX46q0hoJl7dTiN+bYcrQTt [...]
\ No newline at end of file
diff --git a/api/search.index/0160e9c012.js b/api/search.index/0160e9c012.js
new file mode 100644
index 000000000..9715aac27
--- /dev/null
+++ b/api/search.index/0160e9c012.js
@@ -0,0 +1 @@
+rn_("JQHHAAAWwiJkWSKhIiUBxQAAGPQhY5AfhSI1AcQAABanImSFIYYhZyIricIAAB1UYwADxAAAIWVhdHXkrhMAAGsVAADLHQAAbx8AAI4fAAACEQChxgAAvR9VgsAAABW8H+waUh1THbgfuR/7AmZ0G4rFAAAe7yHAAABdHPcgocQAACQgYwHACELDAAAh+ObAGwAAoR8AAMgfAABjIAAAlSAAAFAiAACfIgAA0AAAEDUBxAAAFp0iZP8gACFSIhcZAv0niQfCAAAdqcMAACHJxAAAH4/BAAAa68gAACHUxwAAIpXnfBAAANwQAADGGgAABBwAAA4fAAAHIQAA1SEAAIkiAAAEEAAAYwADygAAInJjaGnixwsAAIEaAADDGgAAEBA=")
\ No newline at end of file
diff --git a/api/search.index/016ee53a83.js b/api/search.index/016ee53a83.js
deleted file mode 100644
index 49bcd80b5..000000000
--- a/api/search.index/016ee53a83.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ockAAHEhIcEAAEQgtSEjBQPEAAAiJ8gAACJiYWly6ZkcAAB8HQAAhR4AAMEfAAAHIAAAaCAAAAYhAAAmIQAAuiEAAMUhAAAGAAADIGuHwgAAHF0=")
\ No newline at end of file
diff --git a/api/search.index/016f12dc9c.js b/api/search.index/016f12dc9c.js
new file mode 100644
index 000000000..323aeac67
--- /dev/null
+++ b/api/search.index/016f12dc9c.js
@@ -0,0 +1 @@
+rn_("ocMAALUeIcMAALQeGCIFjMAAACJVHcohKdUhiSLjAP0hgQDEAAAhoO5KDwAAvRoAAOQaAABUHAAAthwAAKcdAADpHgAA+R8AAAQgAABJIQAAnSEAAP0hAAD/IQAADCIAAEgiAAAAEBEREBABAA==")
\ No newline at end of file
diff --git a/api/search.index/01a6a36a50.js b/api/search.index/01a6a36a50.js
deleted file mode 100644
index f5cb20451..000000000
--- a/api/search.index/01a6a36a50.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLBAAAYbCATPCBhdEHAAADUC7gTwxO1HhUB0QAAFroiZI0iFQHYAAAWySJkuSIVAdAAABbAImSfIhUByAAAFrMiZHgiFQHHAAAWryJkbiLzgwJycxUBzAAAFrIiZHciFQHEAAAWtyJkiCITiQLDAAAiiWNsFQHIAAAWriJkbSIVAcoAABa/ImSYIhUBygAAFr4iZJci+4UVAcYAABacImRRIvOBA2VtbvsCZG/zhsAGKBUByAAAFj4iZH0gFQHMAAAWvCJklSITiQLDAAAiI2RrFQHJAAAWmiJkTyIThMAITMkAACJcywAAImvHAAAiPRsC0wAAIpRmbBUB2gAAFsgiZLEi+4NnTQD+AB+kHVWILQ46ywAAIcVF6vkzTMsAACHHwgAAHKNuXxBgYQFzIAAABQLBAAAUeyIVhiJxcyMCA8QAACGdwgAAHqZhcnY7MAAAAQAAJgARALIWAACjGg0AsBwDAKMdAQDNHQA [...]
\ No newline at end of file
diff --git a/api/search.index/01c377b6c0.js b/api/search.index/01c377b6c0.js
new file mode 100644
index 000000000..8bce69307
--- /dev/null
+++ b/api/search.index/01c377b6c0.js
@@ -0,0 +1 @@
+rn_("RQHDAAAbWCJzvBbOG6McpR4lAcUAABj0IWOQH4UiFQHDAAAaHSJ3gxwFAsAAACcFIhQiEwMiZXAlAc8AABbMImSuIskiJQHHAAAYZSJnYyKpIiUBxgAAFsMiZFwioiLzggNlbHD7gzUBwwAAFqciZIUhhiFnIvsCa3IFlMAAAEW2HLccpx2oHRFAHSHGAACjHKUeIcIAAEIdVB37wAGge/0BQEHBAAAiEhUBwQAApBMgbYoe8wKEglAdAAClAcEAAKTAIW19IfMHhPVHIAAAPAABADQBhwChwgAAUh1VAcEAABT4IWZjIJUgUCKfIqAiUwb9AIEHyAAAIdTFAAAihccAACKVAQ4fAAChzAAA1iEFAsAAALV5IRarH250JQHEAAAWtCJk0iF5IvOCAmJpFQHGAAAWDiJiKCDzBAFjgyccAAAhywAAQSFFISHDAADcHAog+8ACUDUBwQAApBIhbagf1h/XHxMEA8EAACB [...]
\ No newline at end of file
diff --git a/api/search.index/01f6d3f3d8.js b/api/search.index/01f6d3f3d8.js
new file mode 100644
index 000000000..ae6abdf17
--- /dev/null
+++ b/api/search.index/01f6d3f3d8.js
@@ -0,0 +1 @@
+rn_("BQLAAAAXzyEivhaxHW95ocYAAK4dAUThOiAAAJEgAAAzcwDDCIjDAAAcX8kAACId5B8MAACPDgAAuxMAANQUAACDHAAAIgAAFYHCAAAijCGrIvgL+wJrdA==")
\ No newline at end of file
diff --git a/api/search.index/022b8dbc45.js b/api/search.index/022b8dbc45.js
deleted file mode 100644
index 91a7b78f1..000000000
--- a/api/search.index/022b8dbc45.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McMAAMUflCA4IQUCwwAAGowiHakiZXQjBALFAAAhmWJwAcsdAAAVAsMAABmTIaUVIGRz6hsjAALFAAAe8mJ0AbATAAD7Am50W4vEAAAiHw==")
\ No newline at end of file
diff --git a/api/search.index/023e21cd63.js b/api/search.index/023e21cd63.js
new file mode 100644
index 000000000..885c2c654
--- /dev/null
+++ b/api/search.index/023e21cd63.js
@@ -0,0 +1 @@
+rn_("IcEAAHEQnRAxwQAA+BS9H74fAQEBxAAAHK1o474OAABRDwAAaxwAAIUcAAAiCcUCwwAAJ0AhICIQcxtmc4MaYcAAAIATwBNxFcYWLR0vHWUDwAAAFhEgEw0fExYhYmlqzxoFGyIgIyAFIQkhpYLDAAAhAiIiIi8iYwEDwQAAIFppbHP5oRYAAAEAtgI8AzAC8wAEAAUApQDfB/0tUATCAAAcBg==")
\ No newline at end of file
diff --git a/api/search.index/02ca8d4849.js b/api/search.index/02ca8d4849.js
deleted file mode 100644
index 7713edd62..000000000
--- a/api/search.index/02ca8d4849.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BYPAAAAVohwmNiHJIQWDwAAAEtEcFf0eQcAAAGYHAwyfDsYO4wAEwAAADqE1OGRt+CEAAAB4ARoC7wBoAFEJRQAoEA==")
\ No newline at end of file
diff --git a/api/search.index/0326d2a7f7.js b/api/search.index/0326d2a7f7.js
new file mode 100644
index 000000000..fef7a8692
--- /dev/null
+++ b/api/search.index/0326d2a7f7.js
@@ -0,0 +1 @@
+rn_("ZQPAAAAWESATDR8TFiFiaWrPGgUbIiAjIAUhCSGlgsMAACECIiIiLyKlgscAABTOISwgKwLAAAAgWmR6IcYAAJIeVCHxwgAAqxu3CQD9HEkDwAAAE5/BAAAWs8MAAB09+aEWAAABALYCPAMwAvMABAAFAKUA")
\ No newline at end of file
diff --git a/api/search.index/0328d148c3.js b/api/search.index/0328d148c3.js
deleted file mode 100644
index 745da7d8d..000000000
--- a/api/search.index/0328d148c3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAAAWuyJkkiITjALDAAAiX21vBQLFAAAUDSAVdCBxc/uJpQHJAAAU9iFmnSIlAckAABaRImRAIDwiJQHMAAAWtSJk9SGCIiUBzAAAFrQiZPQhgSL7hecBAf0EMA7HAAAhkMIAAB6x4hoOAADtGgAA3RsAAAEAVQHGAAATUiBm+xzsH+0fmCDBISUBxAAAFsMiZEgiqCIjAgLHAAAh8mNs5MEOAABYDwAA5xsAAI4fAACDIgAAAgAAe4/AAAAOGw==")
\ No newline at end of file
diff --git a/api/search.index/0341e2abb6.js b/api/search.index/0341e2abb6.js
deleted file mode 100644
index ebd41c653..000000000
--- a/api/search.index/0341e2abb6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAXzSEivBavHW95BQLAAAAnAyISIhMBImVwJQHPAAAWyiJkrCLHIiUBxwAAGGMiZ2EipyIlAcYAABbBImRaIqAi84IDZWxw84KDJQHEAAAWsiJk0CF3IhOCAsYAAB+pYmnzAAJpdAGQIQAABQLAAAClrB0Vqx1hcgFA6TAPAABUHQAA2h4AABkhAABWIQAAZiEAAGshAACUIQAA2yEAAGQiAAABEJAQkEMBA8YAACETwAAAIBBpdnnk4xsAAO4cAAAcIQAAsCEAAPIhAAABAQAhxQAAzR+LIaHGAAA5IsMB/RUAAsQAACGMxAAAG906MAAAAQAAAAAAEwAQAAAAIQy6FPMazxvQG7Yc1h6/HywgJSFjIYwhjiGPIZghnSGeIQ4iJyK4IiHAAACiGjodWwTEAAAcv8YAACD6ZG1vdgEEhMEAAB/04TggAACPIAAAMwEAAswAACI20gAAInZhcAHAFgAAGwLCAAA [...]
\ No newline at end of file
diff --git a/api/search.index/034e527dcf.js b/api/search.index/034e527dcf.js
deleted file mode 100644
index 0569437f7..000000000
--- a/api/search.index/034e527dcf.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocIAANAdccEAAKofrh9cIF0g5iHnIWMiocIAANQhsccAANsfpQHCAAAXgCFtIByhxwAAVCChwwAA7BvzAMCMAQGaEAAA+44rAsUAAB3GY3QzAAPFAAAh8WFydujACwAAhhoAAOgaAAD4HAAArB0AAJ4eAADjHwAAQCEAABoiAAABAREREA==")
\ No newline at end of file
diff --git a/api/search.index/0395442392.js b/api/search.index/0395442392.js
new file mode 100644
index 000000000..c3445c2d2
--- /dev/null
+++ b/api/search.index/0395442392.js
@@ -0,0 +1 @@
+rn_("JQHFAAAY9CFjkB+FIjUBxAAAFqciZIUhhiFnIiuJwgAAHVRjAAPEAAAhZWF0deSuEwAAaxUAAMsdAABvHwAAjh8AAAIRAKHGAAC9H1WCwAAAFbwf7BpSHVMduB+5H/sCZnQbisUAAB7vIcAAAF0c9yChxAAAJCBjAcAIQsMAACH45sAbAAChHwAAyB8AAGMgAACVIAAAUCIAAJ8iAADQAAAQNQHEAAAWnSJk/yAAIVIiFxkB/SeJB8IAAB2pwwAAIcnEAAAfj8EAABrryAAAIdTHAAAiled8EAAA3BAAAMYaAAAEHAAADh8AAAchAADVIQAAiSIAAAQQAAAFicAAACG0DogTEskdAUM7MAAAAQAAIwACAKwWAAB1GyIA0wD9EVACwAAADATBAAAWqOEVBQAAVgcAAA8=")
\ No newline at end of file
diff --git a/api/search.index/03bfe31530.js b/api/search.index/03bfe31530.js
new file mode 100644
index 000000000..0f8fc73ae
--- /dev/null
+++ b/api/search.index/03bfe31530.js
@@ -0,0 +1 @@
+rn_("FQHBAAAWvSJklCITiALDAAAiYW1vFQPAAAAW+yG13x0R+yAzZXGAIUHIAAAkIiciPSJEIkHCAAAXISQhZiFxIQUCwAAAHKsiHYIiYWgHHIL9HwAexgAAIkPHAAAiRscAACJN1AAAIrrJAAAijssAACJyKwLBAAAiBG9yIcUAAJYcqiEhwQAAwx5NIiHHAAAGIhUiBQLBAAAckiETaB1tbgFG+jYdAAABAHgCEABaAA4ATQCmAIEAcwB3LgD91okTwgAAIT7BAAAg+sIAACE/xwAAIe3spw4AAOoOAACpFgAAuxYAANQaAADcGgAA4RoAADscAACeHAAATB0AAM0dAACIHgAAKCAAABYAAAARAQABBQHEAAAh/HLk4R4AAOcfAABwIAAADyEAAFQiAAAGAAD7AmNnFQHDAAAWyyJkuyLzAIgBthoAAPsDbG9y")
\ No newline at end of file
diff --git a/api/search.index/03d5b025fe.js b/api/search.index/03d5b025fe.js
new file mode 100644
index 000000000..7daecad9f
--- /dev/null
+++ b/api/search.index/03d5b025fe.js
@@ -0,0 +1 @@
+rn_("FQHFAAAWGCFinBwFAsAAABT4IBzQIWN0BQLAAAAW+yER+yAzcQcBhMAwYcIAACE+wQAAIPrEAAAhqsIAACE/KwLFAAAgW2N0G4nFAAAhBhcKAP0UgRfgAAALxM4AACIWywAAIavCAAAa2ccAACBcAT8PAAA=")
\ No newline at end of file
diff --git a/api/search.index/03d6026c2e.js b/api/search.index/03d6026c2e.js
deleted file mode 100644
index c25c33a34..000000000
--- a/api/search.index/03d6026c2e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQL9AgMCwwAAHbDGAAAdzsIAAB0dyAAAH8A7MAAAAQAAAgECAMQOAACBEQEBFQLDAAAhfR8qIRMaIGlu1BRb/QBBCcoAACHFwwAAE7Q=")
\ No newline at end of file
diff --git a/api/search.index/03ed849e4a.js b/api/search.index/03ed849e4a.js
new file mode 100644
index 000000000..ba5a9d5a6
--- /dev/null
+++ b/api/search.index/03ed849e4a.js
@@ -0,0 +1 @@
+rn_("FQPAAAAW+yG13x0R+yAzZXGAISHFAACWHKohIcEAAMMeTSIhxwAABiIVIgUCwQAAHJIhE2gdbW4BRvo2HQAAAQB4AhAAWgAOAE0ApgCBAHMAdyYA/daJE8IAACE+wQAAIPp3ZIWdhsIAACE/xwAAIe3spw4AAOoOAACpFgAAuxYAANQaAADcGgAA4RoAADscAACeHAAATB0AAM0dAACIHgAAKCAAABYAAAARAQABBQHEAAAh/HLk4R4AAOcfAABwIAAADyEAAFQiAAAGAAA7wBIgwAAAFrM=")
\ No newline at end of file
diff --git a/api/search.index/03f834c662.js b/api/search.index/03f834c662.js
new file mode 100644
index 000000000..b86e35722
--- /dev/null
+++ b/api/search.index/03f834c662.js
@@ -0,0 +1 @@
+rn_("IcAAAMIafR1lAcEAABP2GnTLDlwQXRBeEF8QjRplA8AAABYRIBMNHxMWIWJpas8aBRsiICMgBSEJIaWCwwAAIQIiIiIvIjHAAAC5FroW5hulgsQAABTOISwgBQLGAAAXcyIVSSJmdPsCYWYhwgAAEB2LHvMBA2FkcjswAAABAAB9AQYAqxMCAAUVZADRGgEABhtdABQfWgCbIFoAKwLAAAAgWmR6FQHGAAAWyyJkuyLzAYEBLQ8AABsC4AAAE59jcSHGAACSHlQh8cIAAKsb9wkA/RxJA8EAABazwwAAHT35oRYAAAEAtgI8AzAC8wAEAAUApQD7wABF")
\ No newline at end of file
diff --git a/api/search.index/0446c4b2bf.js b/api/search.index/0446c4b2bf.js
deleted file mode 100644
index 9c00e6aad..000000000
--- a/api/search.index/0446c4b2bf.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQLDAAAVPCAWVSJ0d2wgRCEVgccAAByqIp8hIwTBAKDBAAAiNsUAACAMAbMhAAAbAswAACHNY3QVAsMAABYKIBYLIGJvyBoTgQLNAAAhjWFjAUI7MAAAAQAA9gACAIcTAAC/F/UAhw4A/TGQB8sAACAJwwAAFpnIAAAduNAAACIpOzAAAAEAAPkABADuCQEA8gsAACEN9QDgEAAAAQD9ABUBwgAAE4vCAAATjMMAABakxgAAHJftxQkAALYLAACoEwAAtRMAAJkWAACvFgAA9hsAAKUcAADOHQAA0B0AAMAfAAASIQAAcyEAAMwhAACgAAEAAQAA+wJydzHAAAD6G/sbjR8rwAxExQAAIrgXuYfbs8QAAByXFQLBAAAXCSASYBBhcu0J8wCLAaIBAAA=")
\ No newline at end of file
diff --git a/api/search.index/047f58472e.js b/api/search.index/047f58472e.js
new file mode 100644
index 000000000..b538ff515
--- /dev/null
+++ b/api/search.index/047f58472e.js
@@ -0,0 +1 @@
+rn_("AQEBwgAAHcNi+b0OAACSAIkLNwUBABYA+QB0AOoAAQcBwwAAIpJm56weAAABIQAANiEAAD0hAABBIQAARSEAACgiAADGIgAAYAAAARsCxQAAIFpjdPsCbnM=")
\ No newline at end of file
diff --git a/api/search.index/04bd7bcaa7.js b/api/search.index/04bd7bcaa7.js
new file mode 100644
index 000000000..5791bc013
--- /dev/null
+++ b/api/search.index/04bd7bcaa7.js
@@ -0,0 +1 @@
+rn_("AQQBxQAAIR9yiZkdAAClAsIAAKQtIaNVIWJzXB0xxwAAvB0CHwMf+wNla3QVAsIAAB+mIqLeHmNynRwrAsMAAB0vYXQVAcAAABO/FnSAGqHGAABCIfMFAXDiOBwAADQgAACLIAAABVAVAcQAABJFHXLeGvMAAWYB0hQAAPvABCc=")
\ No newline at end of file
diff --git a/api/search.index/05136324ac.js b/api/search.index/05136324ac.js
new file mode 100644
index 000000000..233872257
--- /dev/null
+++ b/api/search.index/05136324ac.js
@@ -0,0 +1 @@
+rn_("ocgAAGoiAQQBxQAAICZyiUkcAAABAAE3i/8ik3DyxQsAAEUQBYnAAAAXQSIRbyEVAcIAAFPdGj0cPhw3IV4icDwhIcgAAKwf6CEFicQAABKMIhGGIiOCAuAAACIIZGYTgYbEAAAhcvMAgvICDAAAyhUFAsAAAB2fIhR1H21uBQLEAAAWeyITXyJvdBUBzQAAFq0iY2ki+wNhaG9n7QDCH+vHAAAff8IAACGY1wAAIsbDAAAh8DswAAABAAAVARQAHgUAAGcJCwDPEAEAoRX0AFkZAAACHAAA+BwBALgdAADEHQAAyx4AAHEfAACiHwAA+x8AABwgAABWIAEABCEAABkhAACUIQAA0SEAAEUiAAATAP0QgQLBAAATsTubSSNe4AAAIdzlGwwAAIsOAACMEwAA6hwAABcgAACPIQAAAQUQ")
\ No newline at end of file
diff --git a/api/search.index/051d293a6b.js b/api/search.index/051d293a6b.js
deleted file mode 100644
index df274a127..000000000
--- a/api/search.index/051d293a6b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQQBxQAAIR1yiZcdAAClAsIAAKQrIaNTIWJzWh0xxwAAuh0AHwEf+wNla3QVAsIAAB+kIqLcHmNymxwrAsMAAB0tYXQVAcAAABO9FnR+GqHGAABAIfMFAXDiNhwAADIgAACJIAAABVAVAcQAABJDHXLcGvMAAWYB0BQAAPvABCc=")
\ No newline at end of file
diff --git a/api/search.index/0569b01667.js b/api/search.index/0569b01667.js
new file mode 100644
index 000000000..aba5c91a2
--- /dev/null
+++ b/api/search.index/0569b01667.js
@@ -0,0 +1 @@
+rn_("JQHPAAAWzCJkriLJIkUBxwAAGGUiZ2IiYyKoIqkiAUblVh0AABshAABYIQAAaCEAAG0hAABmIgAAEJAQJQHGAAAWwyJkXCKiIhUByAAAEAkhc8AfocQAALkc+wJvcvcCAP00yADFAAAh0OXBDgAAWQ8AAKAcAAA+HQAARh0AAMUhAAAQABA=")
\ No newline at end of file
diff --git a/api/search.index/05dd388c2c.js b/api/search.index/05dd388c2c.js
deleted file mode 100644
index 2ccc25e81..000000000
--- a/api/search.index/05dd388c2c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("YcAAAHwcfRyHH4gf7h/vHyHDAAAAHKAfIcIAAPYaxx4BAQHEAAAcq2jjvA4AAE8PAABpHAAAgxwAACIJIcAAAH4TxBb7AmRt8wD9ACUC6NMUAABCHAAA9R4AAMUfAABIIAAAlCAAAPQgAAA4IQAAxyEAAAQQAAAA")
\ No newline at end of file
diff --git a/api/search.index/05e609bf3a.js b/api/search.index/05e609bf3a.js
deleted file mode 100644
index 2614bcc89..000000000
--- a/api/search.index/05e609bf3a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("UcIAAP4buRy6HFMg9yABAwHFAAAgDnKJDhwAABsCzgAAIg5hchWQwwAAFPghwB3zBIjy0xoAAFABAQgBxQAAIZFyiQIfAAChyAAAzh/nAQDAhKTJAAAgcwFcHAAAO5bMAAAgFBUBwAAAINkQKCBuKwWlkMAAABrKH6IOAQCEwQAAE6/lGQwAAIkOAACKEwAA6BwAABUgAACNIQAAAQUQBQLAAAAgDh2JHiopIJUhbHIhxgAAKSCVIaHDAADLEDUBwAAAEnAbbTcPOA9vIDHGAACVHZYdCiAXAQH9AlADwQAAE5HFAAAgC8cAACK46GIOAADIGgAAbBsAAPgbAAA9HQAAuB0AAJweAAAbIAAAQiEAAKAAAQAABYPAAAAfFyIYix+3AQD9OEBAwgAAFPLkIQUAAHkJAABsEAAAtRgAADEdAAAKAACvD8EWp8MAACEgwAAAImLBAAAanw==")
\ No newline at end of file
diff --git a/api/search.index/0663d6d4c3.js b/api/search.index/0663d6d4c3.js
new file mode 100644
index 000000000..037b75f38
--- /dev/null
+++ b/api/search.index/0663d6d4c3.js
@@ -0,0 +1 @@
+rn_("FYTDAAATaiGyH/MEAXTSoRwAAOsxwgAAPBzUHfEeFQHRAAAWyCJkryIhwgAAESFVIvsCYXIlAcAAABCAIXPcGjscAQUBxAAAIfxy4eEeAADnHwAABvOBAmNnIcEAAAsdVCAlhMIAABGDIeIfWCD7AmVsGwLHAAAiOmlyNQHNAAAWvyJkMyI0IpgiBQLDAAAT0SGgfR9uc/OBAmxtBQLEAABBhyAlIYshuSEV9SFlcvcLAMIL6cYAACHn0wAAIqQ7MAAAAQAANAAYALgQDwDjGwEA6hsBAAEcAAAkHAAAMBwHAL0cAQDPHAAA/BwBACYdAACwHQAAxx0AAOAeAADuHwEAhSAAAJogAAA4IQAAgiEAAIghAQCnIQAAwyEAAMshAACQIgEApCIAAA==")
\ No newline at end of file
diff --git a/api/search.index/069330267a.js b/api/search.index/069330267a.js
deleted file mode 100644
index 8143acd4d..000000000
--- a/api/search.index/069330267a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHKAAAW8SF2GiIFhsAAACWtHHAiJa4cDCAVgcUAAByqIp8hI4ECyQAAIbNhczWEwAAAo1UcqRyqHKAdUcIAAKUTphOzGkMgNiKhxAAAECETAQLgAAAasm1z5HkQAAD7FAAAtB0AAKYfAADUHwAABRAQBQLAAAAVrByiUxx1eQUCwAAAFCwgG6oiY3V3HwD+wECIG8sAACFwOzAAAAEAACoAEAAVDAIAbw4SAIATAwDGFgEAgBwAAB8dAQBsHQEA6x4BAC4gAABnIAAA9iAAAJ8hAACtIQAAsyEAAMQhAAA4IgAAG4nBAAAgWQ==")
\ No newline at end of file
diff --git a/api/search.index/06a343f387.js b/api/search.index/06a343f387.js
deleted file mode 100644
index e71e57ffc..000000000
--- a/api/search.index/06a343f387.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcEAAIsTCx8FAsAAABcpIjKnHKgcyB9veSHGAADiHi4h8wICbHTioRMAAO4UAAAtHAAAEwAhxgAAryLDIlMBA8AAACFwZGVp2KwhAAARiyYOAScEIcMAAHsQvxwFAsAAABP/HxC+HGFzBQLDAACnGCKiSyFkc1MBwAgGxAAAIGvS8hoAANwFAsAAABO2HhDxGmFzBQLAAAAUkx/gahxpcwUCwwAAp9YhomkgZHPzBMAIhuOxEwAAcBUAAKshAACTIgAAFAAhxAAAaSFfIhUBwAAAFrsiZJIiKwLDAAAbzWlzBQLDAACnCCGiGR1oc9cDAP2gUILEAAAcq+olBQAAlwkAALwOAABPDwAAZxAAAL0WAABpHAAAgxwAAKAcAADWIQAAGCIAAAAiAAkBEHX9wSAQGQAAphAfG3ohHKAhFOAcHKEhqQ6qDqsOrA77DvwO/Q77/RGBAA==")
\ No newline at end of file
diff --git a/api/search.index/0721bad718.js b/api/search.index/0721bad718.js
new file mode 100644
index 000000000..08dfe9592
--- /dev/null
+++ b/api/search.index/0721bad718.js
@@ -0,0 +1 @@
+rn_("BQLAAAAV2R4U8yFjcxUBwgAAErIibZsiI4cCxwAAIrhhayMOAskAACKlYWMBtiEAACvABGBdiwTdncQAAB6nawPgAAAgEjFlaQ==")
\ No newline at end of file
diff --git a/api/search.index/0757a87726.js b/api/search.index/0757a87726.js
deleted file mode 100644
index 3240202fb..000000000
--- a/api/search.index/0757a87726.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcgAACIiJSI7IkIiQcIAABUhIiFkIW8hBQLAAAAcqSIdgCJhaAccgv0fAB7GAAAiQccAACJExwAAIkvUAAAiuMkAACKMywAAInArAsEAACICb3I=")
\ No newline at end of file
diff --git a/api/search.index/078e770e0d.js b/api/search.index/078e770e0d.js
deleted file mode 100644
index 539990307..000000000
--- a/api/search.index/078e770e0d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQEBwgAAHcFi+bsOAACSAIkLNwUBABYA+QB0AOoAAQcBwwAAIpBm56oeAAD/IAAANCEAADshAAA/IQAAQyEAACYiAADEIgAAYAAAARsCxQAAIFhjdPsCbnM=")
\ No newline at end of file
diff --git a/api/search.index/0792722944.js b/api/search.index/0792722944.js
deleted file mode 100644
index e77a7f78b..000000000
--- a/api/search.index/0792722944.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAVphYZ1R5hbQUCwAAAGdQeGqcfY2wFAsAAABN2IqOHH2x1McgAAOwhNCI1IvOCiSOBlMAAABrO0wD90UABxQAAIBDRAAAiA9EAACIEAY8QAAA=")
\ No newline at end of file
diff --git a/api/search.index/07a15402d9.js b/api/search.index/07a15402d9.js
new file mode 100644
index 000000000..bc8a92bdd
--- /dev/null
+++ b/api/search.index/07a15402d9.js
@@ -0,0 +1 @@
+rn_("FQHBAACkEyBtih7zAoSCUB0AAKUBwQAApMAhbX0h8weE9UcgAAA8AAEANAGHAGsDxQAAH6hjb3BFhMMAABERIqQhKiI5Im0iE4gCwgAAIaVzdEUBwAAAHQMiYo0QPxyEIfohBQLDAAAmNyFeIqTYH21zBQLAAAAV0x4Wpx9jbCUBxQAAFpwiZFEiliITg8AIRMsAACHowgAAIjUVhsAAAKYeIqmAItsbGwLHAAAfrnJzocYAAIgeAQD99PhHNEWP/M9GOlOtxmrNdnieG4NBi+nFAAAe1M8AACHpygAAIZRUcz8mvmY02VmtckO7imDNAAAiBGwPleY8wgAAG7zCAAATujswAAABAABbABwAEQwEAK8OAAABDyoAtxYBACYcAACTHAAALB0AAGYdAADFHQAAkh4AANIeAAByIAAAVCEAAGIhAAD1IQAA/CEAAP4hAABAIgAAbiIAAJMiAACcIgIApyIAALAiAQC0IgM [...]
\ No newline at end of file
diff --git a/api/search.index/07b0a53a4e.js b/api/search.index/07b0a53a4e.js
deleted file mode 100644
index 434329bb2..000000000
--- a/api/search.index/07b0a53a4e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AYPAAgrMAAAiWMYAACGGzwAAInTzAQF3g1wPAAAVAcAAABm5HWYjBRUBzgAAFqsiY2ci8wIBY+H2HAAAbx8AABB7/RVAAMEAACD6")
\ No newline at end of file
diff --git a/api/search.index/07e87a8d4e.js b/api/search.index/07e87a8d4e.js
new file mode 100644
index 000000000..812da8ef0
--- /dev/null
+++ b/api/search.index/07e87a8d4e.js
@@ -0,0 +1 @@
+rn_("FYTAAAASHh1bEKUBxAAApm0hZkYdawPFAAAdL2VvcqUBwAAApEMgc8gaBQLBAAASzRocjSFmbgUCxAAAES0dFQogaXP7AmxvBQLFAAASyR4Toh9rbhsCygAAIHNjddcIAP0XAwbFAAAgEcIAAB8NwgAAIRbGAAAdLuu6CQAA8gkAANgLAACpEAAA0RAAAM8aAAAFGwAA4hwAACIgAABcIAAABSEAAAkhAAAgECAAEAA=")
\ No newline at end of file
diff --git a/api/search.index/083243e371.js b/api/search.index/083243e371.js
deleted file mode 100644
index 0af5d4975..000000000
--- a/api/search.index/083243e371.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("pQHNAAAUkCJmxCIjhsAAwsAAAB6RxwAAIashwwAA+RQsHaUCxAAApCsho1MhYnNaHaHHAACDHRUBygAApEwibTAiJQHGAACk6SFtqiFJIvOGAmZwFYHEAAAV1h5kG2vABEjCAAAWrHcJAP01wArCAAAQZMkAAB/hzAAAIT/yGQUAAKIW")
\ No newline at end of file
diff --git a/api/search.index/0867ddd40f.js b/api/search.index/0867ddd40f.js
new file mode 100644
index 000000000..4e3463574
--- /dev/null
+++ b/api/search.index/0867ddd40f.js
@@ -0,0 +1 @@
+rn_("AUWKhRwAAKHPAAA7IqHUAACAIvOBAmdzJQLLAAAXDyIVzCFiZhoggiIVAcQAACArHdEecr0dSwPgAAAiV8UAAB21ZXR3BQLDAAAcISIfWyJjZvuf")
\ No newline at end of file
diff --git a/api/search.index/087a57bd33.js b/api/search.index/087a57bd33.js
deleted file mode 100644
index af4b26722..000000000
--- a/api/search.index/087a57bd33.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQAB4QAAFMNz6LEOAACQEAAAzhwAANwcAAAZHQAAIR0AABAfAABpIAAASyEAAAgREREQKwLMAAAgGGhyocQAAAghIccAANUecR9RxgAAbCKbIrQitSK7IgFG4toeAACUIQAA2yEAABCQ8wQBZuGNGgAAzh8AAAEFA8MAAB6AIhIVIRgiInR1dyMFAsUAAB+tYnABpxYAAFsDwgAAIjhhaGx3CgD9HJwEwwAAIqPHAAAfwMIAAB7S7qcEAABqHAAAhx0AAJEeAAD4IAAA/SAAADkhAABpIQAAxiEAANohAAD0IQAAUCIAAF8iAACBIgAAkiIAABUgAQAAEAEA")
\ No newline at end of file
diff --git a/api/search.index/08e14bcc6d.js b/api/search.index/08e14bcc6d.js
deleted file mode 100644
index 9d7aca319..000000000
--- a/api/search.index/08e14bcc6d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("odYAAI4iMcYAAKgfSSDZIQUCwAAAEjchEfchdHrzAIQBUSEAADHBAADYH9kfIyLzAgJpc+R4HQAAyh4AAC8gAAB/IAAAhSEAACEBACUBzAAAFrwiZC8ilSIVAcIAABKwIm2ZIiOHAscAACK2YWvnAQL9DRQAyQAAIqPhYRkAALQhAAAQJQHCAAAXpSFt5RvzHEMB/QJFAMIAAB6LxwAAIBPIAAAgdoNeIAAAcwD9EFEA4AAADibh/g4AACwPAAABBQLBAAAYbCATPCBhdEHAAADUC7gTwxO1HgFCOzAAAAEAAPQAAQCfFfQAG4nBAAAdLgFAOzAAAAEAAPUAAgAgDAAAXw/0ABsCwQAAIWhkdGcDAP0gYRbDAAAfycQAAB7IxQAAIlU6MAAAAQAAAAAAJAAQAAAAJgWYCZkJtw5mEHIQuxO8E8ITvxS8Fnwa4Rr0GrobDBwNHKccqBySHZMdrx29HXgfsB/IHzwgbCB [...]
\ No newline at end of file
diff --git a/api/search.index/0900155297.js b/api/search.index/0900155297.js
new file mode 100644
index 000000000..3f559d524
--- /dev/null
+++ b/api/search.index/0900155297.js
@@ -0,0 +1 @@
+rn_("AQQBxAAAHcVyiZAaAABxwQAAlhzVHkggSSCqIQIiIiJTAAPGAAAdyWVodORZCQAAmCAAAJwhAADCIQAALyIAALEAEA==")
\ No newline at end of file
diff --git a/api/search.index/0955750595.js b/api/search.index/0955750595.js
deleted file mode 100644
index cfb450b38..000000000
--- a/api/search.index/0955750595.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FYTDAAATaCGwH/MEAXTSnxwAAOsxwgAAOhzSHe8eFQHRAAAWxiJkrSIhwgAADyFTIvsCYXIlAcAAABB+IXPaGjkcAQUBxAAAIfpy4d8eAADlHwAABvOBAmNnIcEAAAkdUiAlhMIAABGBIeAfViD7AmVsGwLHAAAiOGlyNQHNAAAWvSJkMSIyIpYiBQLDAAATzyGgex9uc/OBAmxtBQLEAABBhSAjIYkhtyEV8yFlcvcLAsIL6cYAACHl0wAAIqI7MAAAAQAANAAYALYQDwDhGwEA6BsBAP8bAAAiHAAALhwHALscAQDNHAAA+hwBACQdAACuHQAAxR0AAN4eAADsHwEAgyAAAJggAAA2IQAAgCEAAIYhAQClIQAAwSEAAMkhAACOIgEAoiIAABsCwQAAFqxhZA==")
\ No newline at end of file
diff --git a/api/search.index/099719029e.js b/api/search.index/099719029e.js
new file mode 100644
index 000000000..cb09f2b3e
--- /dev/null
+++ b/api/search.index/099719029e.js
@@ -0,0 +1 @@
+rn_("BQLAAAAVqBYZ1x5hbQUCwAAAGdYeGqkfY2wFAsAAABN4IqOJH2x1McgAAO4hNiI3IvOCiSOBlMAAABrQ0wD90UABxQAAIBLRAAAiBdEAACIGAZEQAAA=")
\ No newline at end of file
diff --git a/api/search.index/09dc9c2888.js b/api/search.index/09dc9c2888.js
deleted file mode 100644
index 61438b64e..000000000
--- a/api/search.index/09dc9c2888.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BYnAAAATyiERZBAhwgAAvRyxHxWBwAAAGGgg6hQbAsEAAB+NbXL7AnJ1IcQAAHIfrB8lAcQAABbCImRbIqEi8wIBYgEzIgAAGwLDAAAfpGl0wcMAANAfJQHFAAAWmiJkTyKUItMBwAhMywAAIeb6khMAAAEAGgMBAEQFEwEWAPgCYwCYAKUBwQAAEPQfc3QfEwICwgAAHcJpbuStEwAA8hwAAMUeAAA4IAAAjyAAAAADMPsDZWx4AUXi2h4AAJQhAADbIQAAEJDvAQXEAAATtThhaW9y")
\ No newline at end of file
diff --git a/api/search.index/09e2f20fd7.js b/api/search.index/09e2f20fd7.js
new file mode 100644
index 000000000..d9ab8c4ec
--- /dev/null
+++ b/api/search.index/09e2f20fd7.js
@@ -0,0 +1 @@
+rn_("AUU7MAAAAQAAGAECAKQWAQBlGRYBpQHDAAAwUhz/HwAgc/IexQHAAAAUoiFi1BDzgQJkbfsCcnYBAQHCAAAdw2L5vQ4AAJIAiQs3BQEAFgD5AHQA6gABBwHDAAAikmbnrB4AAAEhAAA2IQAAPSEAAEEhAABFIQAAKCIAAMYiAABgAAABGwLFAAAgWmN0O8AAxGc9CbrJQcEAAI0QPxyEIfohscIAABkcpQHFAAAVIyJjqCEVAckAABZsImLqIVOFwghA4AAAHcHzggJkafOBAml0+4c=")
\ No newline at end of file
diff --git a/api/search.index/0a159c2ea3.js b/api/search.index/0a159c2ea3.js
new file mode 100644
index 000000000..5091dce87
--- /dev/null
+++ b/api/search.index/0a159c2ea3.js
@@ -0,0 +1 @@
+rn_("FQHFAAAWGCFinBwFAsAAABT4IBzQIWN0JQHMAAAWxCJkXSKjIgFDibIbAAD7AmFm8wABdAHECwAABQLAAAAW+yER+yAzcQcBhMAwYcIAACE+wQAAIPrEAAAhqsIAACE/KwLFAAAgW2N0G4nFAAAhBjcKAP0UgRfOAAAiFssAACGrwgAAGtnHAAAgXAE/DwAA")
\ No newline at end of file
diff --git a/api/search.index/0a70ccccd8.js b/api/search.index/0a70ccccd8.js
new file mode 100644
index 000000000..dfc602876
--- /dev/null
+++ b/api/search.index/0a70ccccd8.js
@@ -0,0 +1 @@
+rn_("McYAAKofSyDbIQUCwAAAEjkhEfkhdHrzAIQBUyEAADHBAADaH9sfJSLzAgJpc+R6HQAAzB4AADEgAACBIAAAhyEAACEBACUBzAAAFr4iZDEilyIVAcIAABKyIm2bIiOHAscAACK4YWvnAQD9DRQAyQAAIqXhYxkAALYhAAAQ")
\ No newline at end of file
diff --git a/api/search.index/0a95c61e60.js b/api/search.index/0a95c61e60.js
new file mode 100644
index 000000000..834e6e6ae
--- /dev/null
+++ b/api/search.index/0a95c61e60.js
@@ -0,0 +1 @@
+rn_("AUL5dBAAAEoGOATGAFIAAQCiAQ4AvQIlAscAABcPIhXMIWJmGiCCIhUBxAAAE8MdYtgaE4ECxAAAG/FxcysCxAAAFqpjchUBwQAAFr0iZJQiE4sCwwAAImFtbysCxQAAIc9sdEHAAACQE1YidCJ1IgUCwAAAFKsewzIhZnM7wABkxwAAH3QBAAHGAAAgG3KJnBsAAAUCwQAAFA8gFXYgcXPzgwJyc78H/RHBQcYAACKV")
\ No newline at end of file
diff --git a/api/search.index/0ae6f3693d.js b/api/search.index/0ae6f3693d.js
new file mode 100644
index 000000000..f2bdf228a
--- /dev/null
+++ b/api/search.index/0ae6f3693d.js
@@ -0,0 +1 @@
+rn_("AQQBxQAAICZyiUkcAAAFAssAABR9IhWIInFzEwQCxQAAIZNwcuEEHwAAlx8AAIghyAAArB/oIfMBwBDAOzAAAAEAAPcAAwChFfQAyx4AAFYgAQA=")
\ No newline at end of file
diff --git a/api/search.index/0b1587ba24.js b/api/search.index/0b1587ba24.js
deleted file mode 100644
index 49b644c35..000000000
--- a/api/search.index/0b1587ba24.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FYLBAACmfiJ3EKHEAAC+IfMAAW3jyhAAABIdAAAnHQAAeyEAAAMRMcAAALcWuBbkGwUCxwAAF3EiFUciZnQhwgAADh2JHvMEA2FkcjswAAABAAB9AQYAqRMCAAMVZADPGgEABBtdABIfWgCZIFoA2/0NIADgAAAclg==")
\ No newline at end of file
diff --git a/api/search.index/0b2de5f616.js b/api/search.index/0b2de5f616.js
deleted file mode 100644
index 7d75bd932..000000000
--- a/api/search.index/0b2de5f616.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQHFAAAVISJjpiGnIa4hryE1hMUAABcTIeMb7hzvHGUCwAAAFK0h5OgcY3SvDioPvx3IHf0e/h7hxQAA4hwlAcUAACZqIm8iYugh7SGlAcEAABR9IWaEIqUBwgAAFKQhZooi+4kxxQAA0x5GIEcg8wPCAAnz0x0AALgBCAIVAcIAABSUIGPfHyOBAsEAABzwZWwjAAPOAAAilMcAACBIZWZy864OAABYEwIA5wcAww5IxAAAHOHh+QsAACgOAAAHG4bJAAAgEA==")
\ No newline at end of file
diff --git a/api/search.index/0b52fef598.js b/api/search.index/0b52fef598.js
deleted file mode 100644
index 7f4f15a80..000000000
--- a/api/search.index/0b52fef598.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQPGAAASKCAZJCIaQyJhZXOlkMAAACK5E9IUHQ0VAcQAABZmIWY8HRWQwwAAFIIh8RvzAojycRAAAGQE+wNob3I1AcEAABgqIWJ+EMYdCSBVAsIAAHHCHMMcxBzFHOkeoR+zHyXCH2ohaXP6H/sf/B8hIWEhYcQAAA8dEB0RHeoeoh9WIiHDAAD5H0MiMcQAAEwdTR1VISHGAAC3Ir0i8wIBZOXNHgAAyx8AABUiAAAxIgAAiCIAAJYiAAARAQD7AmRuNQHFAAAWDCJiSh1LHSYg+4mXAQH9BCkEwAAAGrXDAAAiielSDwAAyhoAAP8aAAAlHAAArxwAAM8dAADdHQAAzB4AAK8fAABBIAAAABIAIAFhwwAAmhabFpwWnRb6GvsaFQHKAACkTCJtMCIlAcYAAKTpIW2qIUkiM4HACEjMAAAiJlMBlsEAACKq8swaAAA7AVsDwAAAD0lnbm8VAcAAABLhGnlODg8IwIL [...]
\ No newline at end of file
diff --git a/api/search.index/0ba99331bf.js b/api/search.index/0ba99331bf.js
new file mode 100644
index 000000000..99e7eb0ea
--- /dev/null
+++ b/api/search.index/0ba99331bf.js
@@ -0,0 +1 @@
+rn_("IcIAAHkfoiEVAc4AABatImNpIvMDAWPh+BwAAHEfAAAQMcEAAGcbaBuNHm8B/QGhBMMAAB19xgAAIHUFAsAAAD9WInQidSI3HiGyIbMhYXIjAwPAAAAd4sQAACGPZXBzAeAaAAD7AmF5")
\ No newline at end of file
diff --git a/api/search.index/0bf6ab45c7.js b/api/search.index/0bf6ab45c7.js
deleted file mode 100644
index a0407a67c..000000000
--- a/api/search.index/0bf6ab45c7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHFAAAWFiFimhwFAsAAABT2IBzOIWN0BQLAAAAW+SER+SAzcQcBhMAwYcIAACE8wQAAIPjEAAAhqMIAACE9KwLFAAAgWWN0G4nFAAAhBBcFAP0EgRfOAAAiFMsAACGpwgAAGtfHAAAgWgE9DwAAIwACwwAAIpBmZ+eqHgAA/yAAADQhAAA7IQAAPyEAAEMhAAAmIgAAxCIAAGAAAAE=")
\ No newline at end of file
diff --git a/api/search.index/0c18f61033.js b/api/search.index/0c18f61033.js
new file mode 100644
index 000000000..fd1bb8871
--- /dev/null
+++ b/api/search.index/0c18f61033.js
@@ -0,0 +1 @@
+rn_("JQHGAAAWkyJkQiA+IgECAcMAACKSZuesHgAAASEAADYhAAA9IQAAQSEAAEUhAAAoIgAAxiIAAGAAAAGTAP0SAQHCAAAcmMYAAB7bhIMeAAA=")
\ No newline at end of file
diff --git a/api/search.index/0c3e3b0914.js b/api/search.index/0c3e3b0914.js
new file mode 100644
index 000000000..327f0022f
--- /dev/null
+++ b/api/search.index/0c3e3b0914.js
@@ -0,0 +1 @@
+rn_("YcUAALwdAh8DH4YgUCFRISHFAABaInYiBQPAAAAXrSGvkCETtx5pcnkBRjswAAABAAC1AAIAFB9aAJsgWgA1AcsAABSSImYoIsYixyL7AnFyGwLHAAAfyGVuFQHBAAA09x74HkogY8oWFQHOAAAWyyJkuyLzgQJwdyUBwgAAFswiZK4iySIxwwAAuiG7IWgiFQHBAACkTiJtMiIzhgPJAAAieGl0dvsCcnQbAscAACCAYXIFAsAAABOzHRh4IHJ1BQLAAAAagCEQkx5lc1UBwgAAF6chbd0b5xvuG+8b9RxViMMAABe2H6IT7hTvFDQdtB0bwAKExgAAIBXFAAAgdzUBwAAAJMcfliBjkR67HuEfI4ECxgAAIqRtcwWJwAAAF0IiEXAhocQAAOshBYnEAAASjSIRhyIjhQLgAAAiCmRmBQLEAAAWfCITYCJvdBsCzQAAIqBobzcDAcAOa8IAACGZ1wAAIsfDAAAh8cQ [...]
\ No newline at end of file
diff --git a/api/search.index/0c3e5bb0bc.js b/api/search.index/0c3e5bb0bc.js
deleted file mode 100644
index 68a45cae1..000000000
--- a/api/search.index/0c3e5bb0bc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IccAANMhhyIVAcYAABX8IXIAIEHHAAC/H44hjyEOIvMAAmZs47MTAACYFQAAPSAAAJUgAAAGAPOBAm1zIcEAAFMdyCEFAsAAACHpFH0hF2YgbHP7AmVsocMAAMYau/0BSQHJAAAfeMUAACIX")
\ No newline at end of file
diff --git a/api/search.index/0c50442343.js b/api/search.index/0c50442343.js
deleted file mode 100644
index 5844e4b36..000000000
--- a/api/search.index/0c50442343.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocMAALMeIcMAALIeFiIFjMAAACJTHcghKdMhhyLjAP0hgQDEAAAhnuq7GgAAtBwAAKUdAADnHgAA9x8AAAIgAABHIQAAmyEAAPshAAAKIgAARiIAAAEREQEBAEMA/SEABsEAABwEwgAAHarDAAAa7AGWGwAA")
\ No newline at end of file
diff --git a/api/search.index/0c59d91d01.js b/api/search.index/0c59d91d01.js
deleted file mode 100644
index 306263d7a..000000000
--- a/api/search.index/0c59d91d01.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQHDAAAbViJzuhbMG6Ecox4lAcUAABjyIWOOH4MiFQHDAAAaGyJ3gRwFAsAAACcDIhIiEwEiZXAlAc8AABbKImSsIsciJQHHAAAYYyJnYSKnIiUBxgAAFsEiZFoioCLzggNlbHD7gzUBwwAAFqUiZIMhhCFlIvsCa3IFlMAAAEW0HLUcpR2mHRE+HSHGAAChHKMeIcIAAEAdUh37wAGge/0BQEHBAAAiEBUBwQAApBEgbYge8wKEgk4dAAClAcEAAKS+IW17IfMHhPVFIAAAPAABADQBhwChwgAAUB1VAcEAABT2IWZhIJMgTiKdIp4iUwb9AIEHyAAAIdLFAAAig8cAACKTAQwfAAChzAAA1CEFAsAAALV3IRapH250JQHEAAAWsiJk0CF3IvOCAmJpFQHGAAAWDCJiJiDzBAFjgyUcAAAhywAAPyFDISHDAADaHAgg+8ACUDUBwQAApBAhbaYf1B/VHxMEA8EAACB [...]
\ No newline at end of file
diff --git a/api/search.index/0decb3f2ae.js b/api/search.index/0decb3f2ae.js
new file mode 100644
index 000000000..192541bd7
--- /dev/null
+++ b/api/search.index/0decb3f2ae.js
@@ -0,0 +1 @@
+rn_("McMAAK8WsBZ4IBMBAsIAABuqZnLiDgwAAF8OAACaGgAAAFAFAsAAABOtHXayHLMctBy1HKUdph3UIWpwFQHEAAATwx1i2BobAsQAABvxcXP7ikHCAACuHa8dQiFDITHIAACdIZ4h/SFFhMIAABERIqQhKiI5Im0iOwPJAAAiSnB0dSOEA8AAAB/jwgAAIaVpc3TzgQJpbqHEAACjHiUByAAAFrUiZNMheiIlAccAABaxImSuIXAi84HAAOA7wBCgwAAAHQqfAf0FQAnEAAAWqsYAAB94")
\ No newline at end of file
diff --git a/api/search.index/0dee650ec7.js b/api/search.index/0dee650ec7.js
deleted file mode 100644
index c0bd6348e..000000000
--- a/api/search.index/0dee650ec7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAXKSIypxyoHMgfb3kFAsAAACXiHi4hFPogaXmhxAAASB2XAgDAB8HFAAAiq8YAABygxAAAHcznnhAAAKETAADuFAAAARUAAC0cAABlHQAACiEAAGciAAABMQAQAUQ7MAAAAQAAGAECAKIWAQBjGRYB+4M=")
\ No newline at end of file
diff --git a/api/search.index/0e10706b7f.js b/api/search.index/0e10706b7f.js
deleted file mode 100644
index 72a3a47c4..000000000
--- a/api/search.index/0e10706b7f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHCAAAQwxNzZhDCEwEGAsQAACInyAAAImJhcuaZHAAAfB0AAMEfAABoIAAAJiEAALohAADFIQAABgAyAFUBwAAAE7sWY4YOhw6IDj4dpB8BAAHQAAAiVXTSwQkAAPpbwABiywAAIBQhwAAAzgu8HRWBxQAAHKoinyEBQDowAAABAAAAAAATABAAAABwEHYQxhDrG/Ab2R6pH6ofrh+0H1wgXSB1IBMh5iHnIewhNCI1ImMiawPJAAAhs2FyczHAAACnHqgehiBRyAAArh9cIF0g5yFjIqHEAADQHWcBAf1RAAfEAAAhJcQAACH6wwAAIhQ7MAAAAQAAMwAWAKkQCwCaEwAA4xQAAOQaAwBiGwAA/hsAAFgcAgC5HAEAuh4BAN8eAADbHwIA5R8GAC0gAABTIAAAbSABAPcgAAANIQAAdCEAANQhAQBSIgAAYCIBAKYiAQAFAsAAABJ5HxR4H2RnFQHAAAAU7Bp0lhs [...]
\ No newline at end of file
diff --git a/api/search.index/0e17166e9e.js b/api/search.index/0e17166e9e.js
new file mode 100644
index 000000000..f8cac4721
--- /dev/null
+++ b/api/search.index/0e17166e9e.js
@@ -0,0 +1 @@
+rn_("BQLBAAAcYyEZpB9jc6HOAAA7IhUByAAAFQIibJQcQcMAAPce+B5KIPYgFYHHAAAcrCKhISMDwQCgwQAAIjjFAAAgDgG1IQAA+wNob3JnBAD9FYQHyQAAH6PGAAAipckAAB7LyAAAHbjMAAAhz/TKFgAAvQNmAL0A")
\ No newline at end of file
diff --git a/api/search.index/0e17bec233.js b/api/search.index/0e17bec233.js
deleted file mode 100644
index 431ead3db..000000000
--- a/api/search.index/0e17bec233.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FYHHAAAVmCFlIPMAiOGXGgAAkh4AAAgFAsEAABSRISWyH2UhcXMFAssAABR7IhWGInFzocQAAEEdAUWJfh8AABUB0QAAFskiZLki5w4A/RmhA8sAACGVxgAAH7Hqug4AAIUTAACXEwAAuhMAANgUAAD8HAAAbx0AAAIfAACVHwAAyh8AANYfAAAAEDiIgBA=")
\ No newline at end of file
diff --git a/api/search.index/0e33e8d2af.js b/api/search.index/0e33e8d2af.js
new file mode 100644
index 000000000..fa655457b
--- /dev/null
+++ b/api/search.index/0e33e8d2af.js
@@ -0,0 +1 @@
+rn_("BQLAAAAXKyIyqRyqHMofb3kFAsAAACXkHjAhFPwgaXmhxAAASh1XAQHAA8HFAAAircQAAB3O5qMTAADwFAAAAxUAAC8cAABnHQAADCEAAGkiAAATEAEA")
\ No newline at end of file
diff --git a/api/search.index/0eb35a4619.js b/api/search.index/0eb35a4619.js
new file mode 100644
index 000000000..f91288fda
--- /dev/null
+++ b/api/search.index/0eb35a4619.js
@@ -0,0 +1 @@
+rn_("IcgAAJogwyEhwwAA2RDXGhUBzQAAFsgiZK8iWwPMAAAiEm9yczUBwAAAFrAiZGkdbyKLIjWEwwAAFxUh5RvwHPEcO8ACIcMAACGK+wNlaW0=")
\ No newline at end of file
diff --git a/api/search.index/0ec6ef947d.js b/api/search.index/0ec6ef947d.js
deleted file mode 100644
index 173278bf5..000000000
--- a/api/search.index/0ec6ef947d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("pQHDAAAULyFmeSKhwgAA+huhxAAAviHzAAFt48oQAAASHQAAJx0AAHshAAADERsCwAAAEHdkbhWCxQAAFHMh7h4bAsEAAB+PdXlnAQH9A0EDxAAAIZjAAAAgZsMAAB+Q7ZkTAACuEwAAnhoAALYaAADcGwAA3hsAAFwdAACxHQAApR4AAEUgAABlIAAAgSAAALYhAAA9IgAAAAMBAAABANHEAABCHAUCwAAAP1QiciJzIjccIbAhsSFhchMEAsQAACGNcHMB3hoAAOcBAP0XBQDBAAAa68kAACCD8rEBAAAAFQ==")
\ No newline at end of file
diff --git a/api/search.index/0f4b4c588f.js b/api/search.index/0f4b4c588f.js
deleted file mode 100644
index c0227c96f..000000000
--- a/api/search.index/0f4b4c588f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHHAAAWwCJkVyKfIiUBxQAAGPIhY44fgyI1AcQAABalImSDIYQhZSIricIAAB1SYwADxAAAIWNhdHXkrBMAAGkVAADJHQAAbR8AAIwfAAACEQChxgAAux9VgsAAABW6H+oaUB1RHbYftx/7AmZ0G4rFAAAe7SHAAABbHPUgocQAACIgYwHACELDAAAh9ua+GwAAnx8AAMYfAABhIAAAkyAAAE4iAACdIgAA0AAAEDUBxAAAFpsiZP0g/iBQIhcZAv0niQfCAAAdp8MAACHHxAAAH43BAAAa6cgAACHSxwAAIpPnehAAANoQAADEGgAAAhwAAAwfAAAFIQAA0yEAAIciAAAEEAAAYwADygAAInBjaGnixQsAAH8aAADBGgAAEBA=")
\ No newline at end of file
diff --git a/api/search.index/0f50e33a1f.js b/api/search.index/0f50e33a1f.js
new file mode 100644
index 000000000..af44da1a5
--- /dev/null
+++ b/api/search.index/0f50e33a1f.js
@@ -0,0 +1 @@
+rn_("NQHFAAAWZCFiOh0QHxEfRQLAAAAXGSIVASJmdFsd9h5mIE8hBQLAAAAkOR0PHxZzIm9yoc8AAH4iFYLGAAAUFCHAHXcFAcILyMIAAB1wxAAAIknkZxAAAMETAAALHQAAVCAAAEohAAACECAlhMIAABGDIeIfWCD7AmVs")
\ No newline at end of file
diff --git a/api/search.index/0f54016848.js b/api/search.index/0f54016848.js
deleted file mode 100644
index 2d3b19802..000000000
--- a/api/search.index/0f54016848.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAnAyISIhMBImVwJQHPAAAWyiJkrCLHIiUBxwAAGGMiZ2EipyIlAcYAABbBImRaIqAi84IDZWxw84ODdQLBAAAXEyERECBpduMb7hzvHBwhsCGxIfIhJQLBAACmOSIlzR+LIWVzuhS2HCHAAACiGjodOwPGAAAg+mRvdgEAAswAACI20gAAInZhcAHAFgAAGwLCAAAcV2RtFQHGAAAgeyDCIXIdIPMDAXAB3RoAABuJwwAAHZQVAcMAABbJImS5IvMCiAG0GgAAdwcA/TVBAsYAAB/05oIOAAArDwAAPg8AAEsPAAB7HAAAqx0AANgeAAAAIAAANYTAAAATRiEeIR8hsiEBAgHVAAAijm0B/g4AAEWBwAAAWPof+x/8HyEhYSHaHMIfCCBqITHAAADgHuEeyyE1AcYAAEAgICEgAyEHIXO1H74fYyAFhsEAABBcHDK5HLoc9yD7/SkABPsCZXlhwwAAfBx9HIc [...]
\ No newline at end of file
diff --git a/api/search.index/0f57a20414.js b/api/search.index/0f57a20414.js
deleted file mode 100644
index 6a6d15c84..000000000
--- a/api/search.index/0f57a20414.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQICwwAAH8nCAAAhaGZp5b8UAADhGgAApxwAALAfAADIHwAAXSIAAAAQASUBxAAAFhohYqQcjB0rAsEAAB/HZXJByAAAtBy1HKUdph0FAsYAABnSIaJQHXBy8wACbnSCFx0AAEUBxQAAprQiZPQh9SGBIoIiFQHBAAAWuyJkkiITgwLDAAAiX21vIcMAAPcUsx37A2F0dyUBzwAAFsAiZFcinyIlAcEAABaRImRAIDwiUcEAAEgP4hrjGlIc/SH7AmNlCQLgAAAPU88AACITZnPvAf0RQUDNAAAiDmHIAACwHLEcshyzHKMdpB0FAscAADibIZwh+yEaSCJ0dSUByAAAFrMiZNEheCIlAccAABavImSsIW4i84ECcnP7Amdy+wJhcgFFOzAAAAEAAJ8AAgCVHAAA4R2eAKHCAAChHocEAP0DDgzHAAAgbNAAACISwgAAIkfFAAAiKcIAACA88n0TAABMAwFIifwcAAA [...]
\ No newline at end of file
diff --git a/api/search.index/0f73bc1102.js b/api/search.index/0f73bc1102.js
new file mode 100644
index 000000000..572705531
--- /dev/null
+++ b/api/search.index/0f73bc1102.js
@@ -0,0 +1 @@
+rn_("FQPGAAAxYyCVIFAiFoUiGJUiaXN0Dh+xyQAAeSEhxAAA3BwKIKUBwQAApBIhbdYfEwQCwQAAIEVpcuRuHQAA7R4AADAgAABpIAAAxiEAABEAAPMA/RQhAORSHAAAfhwAAIkfAADwHwAA/x8AAAEREA==")
\ No newline at end of file
diff --git a/api/search.index/0fd1b45272.js b/api/search.index/0fd1b45272.js
new file mode 100644
index 000000000..28807e7ac
--- /dev/null
+++ b/api/search.index/0fd1b45272.js
@@ -0,0 +1 @@
+rn_("FQHRAAAWvCJkjyIVAdgAABbLImS7IhUB0AAAFsIiZKEiFQHIAAAWtSJkeiIVAccAABaxImRwIvODAnJzFQHMAAAWtCJkeSIVAcQAABa5ImSKIhOJAsMAACKLY2wVAcgAABawImRvIhUBygAAFsEiZJoiFQHKAAAWwCJkmSL7hRUBxgAAFp4iZFMi84EDZW1u+wJkb/OGwAYoFQHIAAAWQCJkfyAVAcwAABa+ImSXIhOJAsMAACIlZGsVAckAABacImRRIhOEwAhMyQAAIl7LAAAibccAACI/GwLTAAAilmZsFQHaAAAWyiJksyL7g2dNAP4AH6QdbZOk4HrLAAAhx03sJFxGywAAIcnCAAAcpTyCkzICAXUgAAA1AsAAAKzWIUO8Fs4boxylHmt3ihpqImsiocIAAPwbZQHBAACkwCFtFB0VHRYdFx19IX4hFYLFAAAUdSHwHhsCwQAAH5F1eeME/QMBA8QAACGawwA [...]
\ No newline at end of file
diff --git a/api/search.index/100d9ce7be.js b/api/search.index/100d9ce7be.js
new file mode 100644
index 000000000..e9a5ea003
--- /dev/null
+++ b/api/search.index/100d9ce7be.js
@@ -0,0 +1 @@
+rn_("IcIAACAdSSIxwQAAHiGyIbMhIcEAAKQaPB0BgQLMAAAiONIAACJ4YXCnAQL9NEEAxAAAHZbGAAAf9vRNDwAAMA0wAS0B+wJlcw==")
\ No newline at end of file
diff --git a/api/search.index/104d1e155a.js b/api/search.index/104d1e155a.js
deleted file mode 100644
index 28b64ee1d..000000000
--- a/api/search.index/104d1e155a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQHAAAAScBttNw84D28gMcYAAJUdlh0KIBcBAP0CUAPBAAATkcUAACALxwAAIrjuYg4AAMgaAABsGwAA+BsAAJQcAAA9HQAAuB0AAJweAADTHgAAGyAAAEYgAABCIQAAqCEAAAAiAAAgIgAAoAAAEAAQAAB1gcwAABUnIiYhJyEoISkhuiG7IbwhO8AIoMoAACGI")
\ No newline at end of file
diff --git a/api/search.index/10ad727b24.js b/api/search.index/10ad727b24.js
new file mode 100644
index 000000000..ed8c29f2c
--- /dev/null
+++ b/api/search.index/10ad727b24.js
@@ -0,0 +1 @@
+rn_("AUuKWCEAABsCxwAAISJveQUCwAAAw48cEo0dZWwFAsAAABbHHhPcG3J1FQLFAAAWVyEUWCJjdMwaocYAALYdRx0A/kQHOALPAAAiIs4AACKkxQAAIszHAAAfodKuIgAAGw==")
\ No newline at end of file
diff --git a/api/search.index/11189f9fbf.js b/api/search.index/11189f9fbf.js
new file mode 100644
index 000000000..5b2bc394b
--- /dev/null
+++ b/api/search.index/11189f9fbf.js
@@ -0,0 +1 @@
+rn_("IccAANUhiSIVAcYAABX+IXICIEHHAADBH5AhkSEQIvMAAmZs47UTAACaFQAAPyAAAJcgAAAGAPOBAm1zIcEAAFUdyiEFAsAAACHrFH8hF2ggbHP7AmVsocMAAMgau/0BSQHJAAAfesUAACIZ")
\ No newline at end of file
diff --git a/api/search.index/112722c481.js b/api/search.index/112722c481.js
deleted file mode 100644
index 386c31808..000000000
--- a/api/search.index/112722c481.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAACkESBtiB7zAoSCTh0AAKUBwQAApL4hbXsh8weE9UUgAAA8AAEANAGHAGsDxQAAH6Zjb3BFhMMAABEPIqIhKCI3ImsiE4gCwgAAIaNzdAUCwwAAJjUhXCKk1h9tcwUCwAAAFdEeFqUfY2wlAcUAABaaImRPIpQiE4PACETLAAAh5sIAACIzocYAAIYed1QA/eT4A8UAAB7SzwAAIefKAAAhks0AACIBzQAAIgI7MAAAAQAATwAVAK0OAAD/DioAJBwAAJEcAAAqHQAAZB0AAJAeAABwIAAAUiEAAGAhAAA+IgAAbCIAAJEiAACaIgIApSIAAK4iAQCyIgMAtyIAALoiCQDGIgAAyCICAA==")
\ No newline at end of file
diff --git a/api/search.index/1137474c11.js b/api/search.index/1137474c11.js
deleted file mode 100644
index 1934693bb..000000000
--- a/api/search.index/1137474c11.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocYAACscAUQ7MAAAAQAAIwACAKoWAABzGyIAGwLDAAAblmh0BQLBAAASiBoR8x9ydGHCAAAPHRAdER3qHqIfViIBAoHCAAAb8IjGFAAAocMAAIYa+wJudAUCwAAAs2gdJKkWchtmdQWYwAAAGHcftSgcp10A/sDMIQ/BAAAQnMoAAB7ZwgAAHR7DAAAaicEAABCdOzAAAAEAAIoCBQAXBQAAXAj0AMUOAACDEvQAthieAA==")
\ No newline at end of file
diff --git a/api/search.index/1154ef8195.js b/api/search.index/1154ef8195.js
new file mode 100644
index 000000000..93017ec30
--- /dev/null
+++ b/api/search.index/1154ef8195.js
@@ -0,0 +1 @@
+rn_("BQLAAAASQh0SQB1idBsCwQAAIhJheRUBywAAFg4iYiggKwLKAAAhQXFzMwADzgAAIlhldHfpNQ4AAJYTAADCFAAA2BQAAGAcAADIHAAAgB8AACsgAACXIQAAFiIAAIABgIAA")
\ No newline at end of file
diff --git a/api/search.index/117f6b997b.js b/api/search.index/117f6b997b.js
deleted file mode 100644
index b5cb02082..000000000
--- a/api/search.index/117f6b997b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQHMAAAWmyJk/SD+IFAiJQHIAAAWtCJk9CGBIkUBxQAAFmwiZIcdiB2JHcYh84ECZnQlAcgAABa+ImQ+IJcilwEAwAZoxQAAIsbHAAAhevJfEAAAThI=")
\ No newline at end of file
diff --git a/api/search.index/11e40d3fbb.js b/api/search.index/11e40d3fbb.js
deleted file mode 100644
index 80cd3cd82..000000000
--- a/api/search.index/11e40d3fbb.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHKAAAWsiJk0CF3IhsCxQAAHLZjcgUCwAAAN4EggiC2IaJOHW9wIwUCywAAIjdwc/RgIQAAOgEVABQAYwADxQAAHJFkZWkBLAUAAA==")
\ No newline at end of file
diff --git a/api/search.index/1227a472fd.js b/api/search.index/1227a472fd.js
deleted file mode 100644
index e927b0b84..000000000
--- a/api/search.index/1227a472fd.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("YcAAAHwcfRyHH4gf7h/vHyHDAAAAHKAfIcIAAPYaxx4hwQAAfhPEFvMA/QAlAujTFAAAQhwAAPUeAADFHwAASCAAAJQgAAD0IAAAOCEAAMchAAAEEAAAAAFDOzAAAAEAAJ8AAgCVHAAA4R2eAKHEAAArHNv9CgEEa8ALgto=")
\ No newline at end of file
diff --git a/api/search.index/123e00b523.js b/api/search.index/123e00b523.js
deleted file mode 100644
index 15343bc4d..000000000
--- a/api/search.index/123e00b523.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FYTDAAATaCGwH/MEAXTSnxwAAOsxwgAAOhzSHe8eFQHRAAAWxiJkrSIhwgAADyFTIvsCYXIlAcAAABB+IXPaGjkcAQUBxAAAIfpy4d8eAADlHwAABvOBAmNnIcEAAAkdUiAlhMIAABGBIeAfViD7AmVsGwLHAAAiOGlyNQHNAAAWvSJkMSIyIpYiBQLDAAATzyGgex9uc/OBAmxtBQLEAABBhSAjIYkhtyEV8yFlcvcLAMIL6cYAACHl0wAAIqI7MAAAAQAANAAYALYQDwDhGwEA6BsBAP8bAAAiHAAALhwHALscAQDNHAAA+hwBACQdAACuHQAAxR0AAN4eAADsHwEAgyAAAJggAAA2IQAAgCEAAIYhAQClIQAAwSEAAMkhAACOIgEAoiIAAA==")
\ No newline at end of file
diff --git a/api/search.index/12a10d6aeb.js b/api/search.index/12a10d6aeb.js
deleted file mode 100644
index da74fa507..000000000
--- a/api/search.index/12a10d6aeb.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcYAAFgidCITggLSAAAiZmR1BQLAAAAT/x8QvhxhcwUCwwAApxgiokshZHNTAMAIBsQAACBr0vIaAADcAUDjxAkAALMLAACfEAAAVxwAAAFA+wJ5egUCwQAAFY0eEH8aZXMhxgAAtyK9IvMEAWTlzR4AAMsfAAAVIgAAMSIAAIgiAACWIgAAEQEAEwUCwwAAIoljbIL/GgAA+4oFAsAAABO2HhDxGmFzBQLAAAAUkx/gahxpcyHAAACLEwsfBQLDAACn1iGiaSBkcxUCwQAAFSoiE1sgZndVGSOCAsMAACIsaWwFg8AAABOeFtDxDvsCcnTzAP0hOA3lrAMAALETAABwFQAAqRsAAKshAACTIgAAQUYA")
\ No newline at end of file
diff --git a/api/search.index/12d94319a1.js b/api/search.index/12d94319a1.js
new file mode 100644
index 000000000..d1fdbcc7a
--- /dev/null
+++ b/api/search.index/12d94319a1.js
@@ -0,0 +1 @@
+rn_("BQLAAAAsYiKoIsg6IG9yFQHCAAAWyCJkryLzAAFtAXsTAAAFisAAAKFZHRhkIgFB5cAaAADCHAAAvh4AAMgeAABGIAAAtyEAABEAABUBygAAFrwiZI8ixwYB/YMJA8QAACIpwgAAHSXBAAAdWDowAAABAAAAAAAgABAAAAD3GvkagByBHJscrxwxHTIdfh1/HYAdgR2CHYMdhB2HHsMfCSBkIGogCCEoISkhKiErIXMhdCGKIbwhvSG+IcchciIVAcIAABKyIm2bIiOHAscAACK4YWsjCwLJAAAipWFjAbYhAAA7/QhAhMEAAB+SxwAAIhNTAAPBAAAbcmltdOI5DwAAcxsAAHEgAAAQAA==")
\ No newline at end of file
diff --git a/api/search.index/12e93f809a.js b/api/search.index/12e93f809a.js
deleted file mode 100644
index 9d14b0293..000000000
--- a/api/search.index/12e93f809a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHQAAAWwCJknyIVAcgAABazImR4IhUBxwAAFq8iZG4i84MCcnMVAcwAABayImR3IhUBxAAAFrciZIgiE4kCwwAAIoljbBUByAAAFq4iZG0iFQHKAAAWvyJkmCIVAcoAABa+ImSXIvuFFQHGAAAWnCJkUSLzgQNlbW77AmRv+8AGKA==")
\ No newline at end of file
diff --git a/api/search.index/12efb77188.js b/api/search.index/12efb77188.js
new file mode 100644
index 000000000..ea298b213
--- /dev/null
+++ b/api/search.index/12efb77188.js
@@ -0,0 +1 @@
+rn_("BQLAAAAV2R4U8yFjcxUBwgAAErIibZsiI4cCxwAAIrhhayMOAskAACKlYWMBtiEAACvABGBdiwTdncQAAB6n+4Y=")
\ No newline at end of file
diff --git a/api/search.index/134803e651.js b/api/search.index/134803e651.js
deleted file mode 100644
index 758a02ab1..000000000
--- a/api/search.index/134803e651.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BYPBAAAS0hwV/h4Fg8EAABLRHBX9Hmv8DgDgAAAQhAEAkMQAABvn5fwLAAA+DgAA1xsAADEgAABKIAAALSEAAAkQAAUCwQAAIGsQQx0T8yFmc6HGAAD4HEHDAADCHRogFyGSIQUCwQAAFUogFjohZm41AcAAABQJInD0Hz4hHiIFicAAABdAIhFuIaHEAADpIQWJxAAAEosiEYUiI4UC4AAAIghkZgUCxAAAFnoiE14ib3QbAs0AACKeaG9nNgHAD+vEAAAfb8IAACGX1wAAIsXDAAAh7+eMEAAAJh0AAHQfAAB9HwAAKiEAAIEhAACqIQAASSIAACAQAAAhzgAAYCKmIiHEAAASIXMhUwD9EAAHwQAAIczEAAAhOTowAAABAAAAAABCABAAAADKDssOzA7NDs4Ozw7QDtEO0g7TDtQO1Q7WDtcO2A7ZDtoO2w7cDt0O3g7fDuAO4Q7iDuMO5A7lDuYO/RsoHCkcKhy [...]
\ No newline at end of file
diff --git a/api/search.index/136c9579cf.js b/api/search.index/136c9579cf.js
new file mode 100644
index 000000000..a80eafc01
--- /dev/null
+++ b/api/search.index/136c9579cf.js
@@ -0,0 +1 @@
+rn_("BQLBAAAUfSIViCJxcyMBA8QAACGfwgAAHqhhcnY7MAAAAQAAJgARALQWAAClGg0AshwDAKUdAQDPHQAAjx4AAMYeAADlHgMA9R4AAJMfAQD3HwEAAyAAAIAgAAB4IQAAgSEAANQhAADaIQAA")
\ No newline at end of file
diff --git a/api/search.index/13804e0a5e.js b/api/search.index/13804e0a5e.js
new file mode 100644
index 000000000..8e655a4c2
--- /dev/null
+++ b/api/search.index/13804e0a5e.js
@@ -0,0 +1 @@
+rn_("ocYAAC0cAUQ7MAAAAQAAIwACAKwWAAB1GyIAGwLDAAAbmGh0BQLBAAASihoR9R9ydGHCAAARHRIdEx3sHqQfWCIBAoHCAAAb8ojIFAAAocMAAIga+wJudAUCwAAAs2odJKsWdBtmdQWYwAAAGHkftSocp10A/sDMIQ/BAAAQnsoAAB7bwgAAHSDDAAAai8EAABCfOzAAAAEAAIoCBQAXBQAAXAj0AMcOAACFEvQAuBieAA==")
\ No newline at end of file
diff --git a/api/search.index/13dc1445e4.js b/api/search.index/13dc1445e4.js
new file mode 100644
index 000000000..46b1eaec4
--- /dev/null
+++ b/api/search.index/13dc1445e4.js
@@ -0,0 +1 @@
+rn_("dQPGAAAxwhzDHL4eElgdolkdaWxy9xqAHIEcMR0yHXMhdCGhxQAAwxYlAc0AABCIIHMvIHYhFQHRAAAWvCJkjyIVAdgAABbLImS7IvOHAnJ2JQLHAAAmhyCLIRLUHWJyARwmHSHHAAAAHFUg1wcA/gAJpAzLAAAfwwGoHgAABQLBAAAUfSIViCJxc4MA/kACkAjEAAAhn8UAACKTxQAAIGjCAAAeqDswAAABAAArABUAMA8BALQWAAClGg0AshwDAKUdAQDPHQAAgh4AAI8eAADGHgAA5R4DAPUeAACTHwEA9x8BAAMgAABCIAAAgCAAAHghAACBIQAA1CEAANohAAA+IgAAxQLAAAAnQCEgIhBzG2ZzgxohxQAA3BwKICHBAADAEy0dAUbi3B4AAJYhAADdIQAAEJABReHVHAAAfiAAAGB3AQH9JAEDxAAAHJXn+QsAABoOAACqFgAAjxoAANYbAADQHwAAeiAAAAc [...]
\ No newline at end of file
diff --git a/api/search.index/13e149cdba.js b/api/search.index/13e149cdba.js
new file mode 100644
index 000000000..7b5c347e6
--- /dev/null
+++ b/api/search.index/13e149cdba.js
@@ -0,0 +1 @@
+rn_("AUDhmRoAAJQeAAAIBQLBAAAUkyEltB9nIXFzBQLLAAAUfSIViCJxc6HEAABDHQFFiYAfAABnBwD9EaEDywAAIZfGAAAfs+eZEwAA2hQAAP4cAABxHQAABB8AAJcfAADMHwAA2B8AABOIiAEbA9MAACJMwQAAHSdlaGk=")
\ No newline at end of file
diff --git a/api/search.index/140cb04cd3.js b/api/search.index/140cb04cd3.js
deleted file mode 100644
index 03ae732cb..000000000
--- a/api/search.index/140cb04cd3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHDAAAWuiJkjSITAALDAAAb7nN067MOAAAwDwAAOQ8AAFQdAADaHgAAGSEAAFYhAABmIQAAayEAAJQhAADbIQAAZCIAAAAxEJAQkAUCwAAAFscfEQMcYm8FAsAAACcDIhIiEwEiZXChwgAA+htlAcEAAKS+IW0SHRMdFB0VHXshfCEVgsUAABRzIe4eGwLBAAAfj3V54wL9AwEDxAAAIZjDAAAfkOiuEwAAthoAAN4bAABcHQAARSAAAGUgAACBIAAAtiEAAD0iAAADEAAQACHEAADMGgccJQHPAAAWyiJkrCLHIkUBxwAAGGMiZ2AiYSKmIqciAUblVB0AABkhAABWIQAAZiEAAGshAABkIgAAEJAQJQHGAAAWwSJkWiKgIhUByAAAEAchc74focQAALcc+wJvcvcCAf00yADFAAAhzuW/DgAAVw8AAJ4cAAA8HQAARB0AAMMhAAAQABD7AmdzdwUA/kBGAEnGAAA [...]
\ No newline at end of file
diff --git a/api/search.index/1443f1a312.js b/api/search.index/1443f1a312.js
new file mode 100644
index 000000000..b06da392b
--- /dev/null
+++ b/api/search.index/1443f1a312.js
@@ -0,0 +1 @@
+rn_("JQHEAAAWxSJkSiKqIiMAAscAACH0Y2zkww4AAFoPAADpGwAAkB8AAIUiAAACAABRwQAApxOoE7UaRSA4IlsD4AAACdtla3k=")
\ No newline at end of file
diff --git a/api/search.index/146adf1a3f.js b/api/search.index/146adf1a3f.js
new file mode 100644
index 000000000..4c7d7cdfd
--- /dev/null
+++ b/api/search.index/146adf1a3f.js
@@ -0,0 +1 @@
+rn_("ocIAAOAcBYbAAAARmxAaVSAFAsQAABf5IBmBIWNwAQEB4QAAFMVz6LMOAACSEAAA0BwAAN4cAAAbHQAAIx0AABIfAABrIAAATSEAAAgREREQS8ACgcMAACI6xwAAH8IFAsMAABWPHhCBGmVzNQHHAAATVCBm/RzuH+8fIcMAAB8dcyKlgcIAABPtG8MUS8AChMoAACD4xQAAHdChxwAACiEFAsEAALZgIBCREGN2QccAANgh2SEaIhsiAQD+wOYlT8IAACIZwwAAHbIVDXMVmluPHFxNJUptOv5bCZdVhwi7wN8qxwAAHo4FoohFgy9Qhj4rFz69QJx8Xbo8DcUAAB+LTdd5bqNYrusIGjswAAABAAAhAgYAEwUAADoGGwHGDgAAZhAAAIMRAQH0FAAA")
\ No newline at end of file
diff --git a/api/search.index/14819f97e1.js b/api/search.index/14819f97e1.js
new file mode 100644
index 000000000..69e74d961
--- /dev/null
+++ b/api/search.index/14819f97e1.js
@@ -0,0 +1 @@
+rn_("FQHHAAAUvyFsWyIbAsIAAByEY3QrAsoAACJabW6xxAAA1hsFwMAAyAAAFScdqgwhFsMe2/2BSAHLAAAhUscAAB7E")
\ No newline at end of file
diff --git a/api/search.index/14a38d9c22.js b/api/search.index/14a38d9c22.js
deleted file mode 100644
index 5b0415cf5..000000000
--- a/api/search.index/14a38d9c22.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcMAAA8hUyIFAsQAACEjIbchFfMhZXIzBcABKMEAAB7v5OgbAAC7HAAA+hwAAK4dAACiIgAAEQAAMcAAAFAc/R/+H6HGAABAITHFAAB4IHkgBSLTAcAKSMMAABzy5TYcAACdHgAA8B4AAOIfAAAyIAAAiSAAAAAQVfsCbnQ=")
\ No newline at end of file
diff --git a/api/search.index/14bf5da809.js b/api/search.index/14bf5da809.js
deleted file mode 100644
index a51a5fb59..000000000
--- a/api/search.index/14bf5da809.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHIAAAWwyJkSCKoIisCxgAAHoBlbRvAACrFAAAgFMkAAB/aQcMAALceuB7NH4shBYzAAAASyCEZhyITBwLCAAAiFmZp5EchAACbIQAA+yEAAAoiAABGIgAAAQEA+wJhciUCwgAAFw0iFcohYmYYIIAiMcUAAFQiciJzIjWEwAAAE0YhHiEfIbIhMcIAAOAe4R7LIUHBAADwH/Ef8h8PIgUCwAAAJRshRSISRSF1efcAAf0CAQfiAAAPPuimHAAAjR0AAJQfAAAwIAAAJCEAAKIhAAAoIgAANyIAAGsiAAAEAAAAAPsDZWxvFYjEAAAUsR2YGzUBywAAFqUiZIMhhCFlIisC4AAAHAtucBuRwQAAHNsVAcIAABbGImStIsUBwQAAoAkcczAhZcDDA0AAAKRIHRarIhXMHQEVAhVlHQohCyFnIvsCdHoVAcYAABX8IXIAIEHHAAC/H44hjyEOIvMDAmZs47MTAACYFQA [...]
\ No newline at end of file
diff --git a/api/search.index/14d78ea2b6.js b/api/search.index/14d78ea2b6.js
new file mode 100644
index 000000000..088aea5a6
--- /dev/null
+++ b/api/search.index/14d78ea2b6.js
@@ -0,0 +1 @@
+rn_("BQLDAAAWyR8RBRxibzUBwQAAGCwhYoAQyB0LIFUCwgAAccQcxRzGHMcc6x6jH7UfJcQfbCFpc/wf/R/+HyMhYyHzAAJrbwEiIQAAFYHHAAAVmiFnIPMAA29zdOGZGgAAlB4AAAgFAsEAABSTISW0H2chcXMFAssAABR9IhWIInFzAQQBwwAAIpJm56weAAABIQAANiEAAD0hAABBIQAARSEAACgiAADGIgAAYAAAASHDAACGE6MWRQHEAAAmQCKeImSCGgAbfyBTIrv9CUAIxQAAH7O1AsEAAKJDHRC8GmVzbhUBRImAHwAAKwLCAAAfwnJ4FQHQAAAWyyJkuyKxxwAASiH7AmRyFQHFAAAWGCFinBwFAsAAABT4IBzQIWN0BQLAAAAW+yER+yAzcQcBhMAwYcIAACE+wQAAIPrEAAAhqsIAACE/KwLFAAAgW2N0G4nFAAAhBhcFAv0EgRfOAAAiFssAACGrwgAAGtn [...]
\ No newline at end of file
diff --git a/api/search.index/1549010b8f.js b/api/search.index/1549010b8f.js
deleted file mode 100644
index 6efbacbaa..000000000
--- a/api/search.index/1549010b8f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUL5chAAAEoGOATGAFIAAQCiAQ4AvQIlAscAABcNIhXKIWJmGCCAIhUBxAAAE8EdYtYaE4ECxAAAG+9xcysCxAAAFqhjchUBwQAAFrsiZJIiE4sCwwAAIl9tbysCxQAAIc1sdEHAAACOE1QiciJzIgUCwAAAFKkewzAhZnM7wABkxwAAH3IBAAHGAAAgGXKJmhsAAAUCwQAAFA0gFXQgcXPzgwJyc78H/RHBQcYAACKT")
\ No newline at end of file
diff --git a/api/search.index/16a3fd0bc7.js b/api/search.index/16a3fd0bc7.js
new file mode 100644
index 000000000..80f99b639
--- /dev/null
+++ b/api/search.index/16a3fd0bc7.js
@@ -0,0 +1 @@
+rn_("BYPAAAAVpBwmOCHLIQWDwAAAEtMcFf8eQcAAAGYHBQyhDsgO4wAEwAAADqM1OGRt+CEAAAB4ARoC7wBoAFMJRQAoEA==")
\ No newline at end of file
diff --git a/api/search.index/16c431f301.js b/api/search.index/16c431f301.js
new file mode 100644
index 000000000..8f4b8f6d9
--- /dev/null
+++ b/api/search.index/16c431f301.js
@@ -0,0 +1 @@
+rn_("IcMAABEhVSIFAsQAACElIbkhFfUhZXIzBcABKMEAAB7x5OobAAC9HAAA/BwAALAdAACkIgAAEQAAMcAAAFIc/x8AIKHGAABCITHFAAB6IHsgByLTAcAKSMMAABz05TgcAACfHgAA8h4AAOQfAAA0IAAAiyAAAAAQVfsCbnQ=")
\ No newline at end of file
diff --git a/api/search.index/16e73ac158.js b/api/search.index/16e73ac158.js
deleted file mode 100644
index 4e9b6002f..000000000
--- a/api/search.index/16e73ac158.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHAAAAUOCFjVyDzAwFzAcMfAAATAALHAAAg9GZyAWoQAAArAsMAABtiYWehwwAAsx4hwwAAsh4WIgWMwAAAIlMdyCEp0yGHIuMA/SGBAMQAACGe6rsaAAC0HAAApR0AAOceAAD3HwAAAiAAAEchAACbIQAA+yEAAAoiAABGIgAAARERAQEAKwLCAAAdqmZz+wJjbg==")
\ No newline at end of file
diff --git a/api/search.index/172ff8c312.js b/api/search.index/172ff8c312.js
deleted file mode 100644
index 04dbb3c9b..000000000
--- a/api/search.index/172ff8c312.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McUAALodAB8BH1WIxAAAF7QfoBPsFO0UMh2yHWUDwAAAFg8gEwsfExQhYmlqzRoDGyAgISADIQchpYLDAAAhACIgIi0i8wUCbHP5nxYAAAEAtgI8AzAC8wAEAAUApQAFAsAAABS4IhbaH2N01wIA/RMREMMAACGgygAAIX47MAAAAQAAKgAFAGIQAQDSEAMAqhYAAHMbIgANIgAA")
\ No newline at end of file
diff --git a/api/search.index/17b987dbb3.js b/api/search.index/17b987dbb3.js
deleted file mode 100644
index f3cc3284e..000000000
--- a/api/search.index/17b987dbb3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("wcoAADAhockAAHEhJYTFAAAhRCC1IYUeBiH7hhUDxgAAIZMgTiIWgyIYkyJpc3QMH6UBwQAApBAhbdQfEwQCwQAAIENpcuRsHQAA6x4AAC4gAABnIAAAxCEAABEAAPsCY27BxQAAgR4FAsMAAMPQHxWkH3Bz8wDDCGDy+g4AANcMFQHBAABEvSF8In0ipCJsWSL7AmN0")
\ No newline at end of file
diff --git a/api/search.index/184dadfdd0.js b/api/search.index/184dadfdd0.js
deleted file mode 100644
index 87a67889f..000000000
--- a/api/search.index/184dadfdd0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FYbCAACmHCKpfiLZG0HAAADWC9cL4BxaIFHGAACrH2Ih8CFqIm8i8wABYualFgAAbRsAADgdAAAOHwAAuB8AAOghAADtIQAAAQEAAPMEAXLyjRMAACoKBQLAAAAURyISvxRveQWJwAAAE6QfFP8h8cYAAEsgJQHEAAAWwiJkWyKhIvMCAmJpATMiAAAxwwAAxR+UIDghFQLFAAAZkyGlFSBkc+ob+4mXAQD9NAFEywAAITvGAAAiF8MAABp++6EaAAC4AoMAswAaABAAOwDrAHgADQDpACWCwwAAMWwbuB25HWwQMR2lAcEAABR9IWaEIgECAcMAACGkZuO7FAAAbh0AANAfAACKIgAAMDH7iTUBwwAAKKof5iFnyR5UIFUgQccAAOgb6Rv6HKIiBYrAAAAkaxueHzTTHkYgRyB1AcEAABaYHGL9C/4LMQ8yDzMPNA81DwEDAcUAACKaZORnGwAANx0AAA0fAABPIgA [...]
\ No newline at end of file
diff --git a/api/search.index/18775b4eb3.js b/api/search.index/18775b4eb3.js
deleted file mode 100644
index e07d81c28..000000000
--- a/api/search.index/18775b4eb3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAXzSEivBavHW95ocYAAKwdAUThOCAAAI8gAAAzcwDDCIjDAAAcXckAACIb5B0MAACNDgAAuRMAANIUAACBHAAAIgAAFYHCAAAiiiGpIvYL+wJrdA==")
\ No newline at end of file
diff --git a/api/search.index/18a815b780.js b/api/search.index/18a815b780.js
new file mode 100644
index 000000000..11da5c55f
--- /dev/null
+++ b/api/search.index/18a815b780.js
@@ -0,0 +1 @@
+rn_("FQHRAAAWyiJksyJhxAAAER0SHRMd7B6kH1giFQHCAAAWyCJkryLzAAFtAXsTAAAFisAAAKFZHRhkIiHDAAD7H0UiBYrAAAATiyIRWB0BQea3GgAAwBoAAMIcAAC+HgAAyB4AAEYgAAC3IQAAARAAABUBygAAFrwiZI8iMcQAAE4dTx1XISHGAAC5Ir8i8wIBZOXPHgAAzR8AABciAAAzIgAAiiIAAJgiAAARAQD7AmRuNQHFAAAWDiJiTB1NHSgg+4lH/wD9pykXxAAAIinCAAAdJcsAACJ3OjAAAAEAAAAAADUAEAAAAFQP2RDtFMwa1xr3GvkaARsCGyccKBwpHIAcgRybHK8csRwxHTIdfh1/HYAdgR2CHYMdhB3RHd8d4B3hHYcezh6xH8MfCSBDIEQgZCBqIAghKCEpISohKyFzIXQhfCGKIaMhvCG9Ib4hxyFyIg==")
\ No newline at end of file
diff --git a/api/search.index/18fbd8cd19.js b/api/search.index/18fbd8cd19.js
deleted file mode 100644
index 6ae81db52..000000000
--- a/api/search.index/18fbd8cd19.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("wcoAADAhockAAHEhJYTFAAAhRCC1IYUeBiH7hhUDxgAAMWEgkyBOIhaDIhiTImlzdAwfpQHBAACkECFt1B8TBALBAAAgQ2ly5GwdAADrHgAALiAAAGcgAADEIQAAEQAA+wJjbsHFAACBHgUCwwAAw9AfFaQfcHPzAMMIYPNeDgAAnADXDA==")
\ No newline at end of file
diff --git a/api/search.index/1947f82db6.js b/api/search.index/1947f82db6.js
deleted file mode 100644
index 4f4c79f0e..000000000
--- a/api/search.index/1947f82db6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAT/x8QvhxhcwUCwwAApxgiokshZHNTAcAIBsQAACBr0vIaAADcBQLAAAATth4Q8RphcwUCwAAAFJMf4GocaXMFAsMAAKfWIaJpIGRz8wDACIbjsRMAAHAVAACrIQAAkyIAABQA")
\ No newline at end of file
diff --git a/api/search.index/195f7e480d.js b/api/search.index/195f7e480d.js
deleted file mode 100644
index b6b03cb62..000000000
--- a/api/search.index/195f7e480d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHHAAAWkSJkQCA8IiHBAAC4Dpcb+wJsbQEBAsYAAB3GxQAAIfFhduX4HAAArB0AAJ4eAADjHwAAQCEAABoiAAAREREhwAAACgyKGqHIAABoIgEEAsYAACFl6AAAHpJyc+H8HAAA1h8AAIEhxgAANSFcIvMBwgBC8wAcAACgA2IB+wJtbvuT")
\ No newline at end of file
diff --git a/api/search.index/19cb701cce.js b/api/search.index/19cb701cce.js
new file mode 100644
index 000000000..1a167a0e9
--- /dev/null
+++ b/api/search.index/19cb701cce.js
@@ -0,0 +1 @@
+rn_("BQLAAAAVNB0ixRa/HmRmG4rGAAAggCHCAAAIII4i8wKQ6msQAACHEAAA1hoAAOIaAAD3GwAA1h4AAHIfAACpHwAA4B8AAAUiAAAUIgAABQABEAEQGwLgAAAhcGlzJQHCAAAWzCJkriLJIqHCAAD6HDHDAAC6IbshaCIlAsMAABZHIhLNIWJyMiAmIRUBwQAApE4ibTIiNQHEAAAQLyFziSCKIHch9wAE/gBIAAvJAAAieAFCIgAA84ECaW77AnJ0+wNhb3I=")
\ No newline at end of file
diff --git a/api/search.index/19e829c837.js b/api/search.index/19e829c837.js
new file mode 100644
index 000000000..dcd44d46d
--- /dev/null
+++ b/api/search.index/19e829c837.js
@@ -0,0 +1 @@
+rn_("JQLDAAAVPiAWVyJ0d24gRiGlwMQJYAAAFqUfEzgdFdIeFL4dAxsVAsMAABYMIBYNIGJvyhpbA80AACGPYWN3IcMAAPoU7x77g8HBAACDHgFBOzAAAAEAAJ8AAgDFDgAA5BCeAPMAkoLJDgAAAUE7MAAAAQAA9gACAIkTAADBF/UAK5TAAAAQYyUBwgAAFrEiZK4hcCITgQLDAAAiZG1uAQEBwwAAHFNm46gbAAAcHAAAPR0AAPAhAAAVASUByAAAFsIiZFkioSKhzwAAgCLzhAJmcxUBxAAAoDkcc6UbGwLBAAAWm2JyFQHAAAAWyyJkuyL7AmRyFQHLAAAQ0R5yvR0FAsAAAEfcHd0dKSB5IBsLIG5yAQD9c7kHJpxsm5V/KHNPwzMEB5dfyAAAHbpNlOD7nkEv8VHEA0QAEJsvfNsIcDNkZdFk0AAAIitdt0j/okqJ5wpoMCl2QeQ7MAAAAQAA+QAEAPAJAQD0CwA [...]
\ No newline at end of file
diff --git a/api/search.index/1a0392cc35.js b/api/search.index/1a0392cc35.js
new file mode 100644
index 000000000..3573a45a1
--- /dev/null
+++ b/api/search.index/1a0392cc35.js
@@ -0,0 +1 @@
+rn_("JQHFAAAY9CFjkB+FIjUBxAAAFqciZIUhhiFnIgUCwAAAElQdJqMcpR5icvuJYwADxAAAIWVhdHXkrhMAAGsVAADLHQAAbx8AAI4fAAACEQChxgAAvR9VgsAAABW8H+waUh1THbgfuR/7AmZ0G4rFAAAe7wWRwAAAIQwMjBoiug6ZGxUBwAAAFmYdZPcLG4zAAAAa6yHAAADaCdMUIcAAAF0c9yChxAAAJCBjAMAIQsMAACH45sAbAAChHwAAyB8AAGMgAACVIAAAUCIAAJ8iAADQAAAQW8AEBsUAACFrBQLBAAATjx8ivxyzH3J1FZDAAAAUPxzZCRvEADDKAAAiE8IAABB3FQHBAAAWvSJklCITiQLDAAAiYW1vNQHDAAAWnSJk/yAAIVIia8ARAcEAABqLAQD9N6lHWdV4RTHCAAAdqcMAACHJR+HPe1BfIb5pUyyUaQgMUKRboVsETasIxMgAACHUB2EE0/EZlxY [...]
\ No newline at end of file
diff --git a/api/search.index/1aac07067f.js b/api/search.index/1aac07067f.js
new file mode 100644
index 000000000..740b18a5d
--- /dev/null
+++ b/api/search.index/1aac07067f.js
@@ -0,0 +1 @@
+rn_("IcAAAF0c9yChxAAAJCBjAMAIQsMAACH47oATAADAEwAAcRUAAMYWAACkGgAAwBsAAC0dAAAvHQAAPB0AAKEfAADIHwAAYyAAAJUgAABQIgAAnyIAAAAADQAAAAAQ")
\ No newline at end of file
diff --git a/api/search.index/1b0242b04a.js b/api/search.index/1b0242b04a.js
new file mode 100644
index 000000000..d3542bd62
--- /dev/null
+++ b/api/search.index/1b0242b04a.js
@@ -0,0 +1 @@
+rn_("BQLAAAAXKyIyqRyqHMofb3khxgAA5B4wIaHEAABKHVcBAcADwcUAACKtxAAAHc7moxMAAPAUAAADFQAALxwAAGcdAAAMIQAAaSIAABMQAQAFicUAADjuITYiNyIUeCIFAsAAABT1H2KUHZUdpSG6IbshaCJveSUBygAAFsUiZEoiqiIFjMAAABLKIRmJIhMIAsIAACIYZmnkSSEAAJ0hAAD9IQAADCIAAEgiAAABAQAxxQAAViJ0InUiNYTAAAATSCEgISEhtCExwgAA4h7jHs0hQcEAAPIf8x/0HxEiBQLAAAAlHSFHIhJHIXV58wH9AgED6KgcAACPHQAAlh8AADIgAAAmIQAApCEAACoiAAA5IgAAbSIAAAQAAAAA+wJlbPMAA3B0dfKiGgAA1gTFAcEAABUgIHdAHCUBwAAApE4ibeMfMiL7AmRuVQHDAAAQLyFzSB2mHokgiiB3ISuFwwAAICExxQAAhiBQIVE [...]
\ No newline at end of file
diff --git a/api/search.index/1b54fe0ca3.js b/api/search.index/1b54fe0ca3.js
deleted file mode 100644
index f9e8141f4..000000000
--- a/api/search.index/1b54fe0ca3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHHAACoaCJ3AiExwAAAtxa4FuQbAUXiSyAAAHchAAARIgAAYgAbAsUAAB+pbnQhwwAAaBXlIaWCxAAAFMwhKiAxxQAAuiK+Ir8ioc0AAC0iBQLGAAAXcSIVRyJmdPMA/ADUAdsJAABBxgAAsiKzIsAiwiLzBAFk5v8eAADQIQAAVyIAAFsiAAB3IgAAnyIAAKEiAAABABAAIcIAAA4diR73CwD9iwEH4QAAHAk7MAAAAQAAkQESAIwJAADVCwAAphAAAKkTAgADFWQAlhYAAM8aAQAEG10Avh4CABIfWgA+IAEAmSBaADAhAwBTIQEA9yEAADMiAACNIgAAlyIBAA==")
\ No newline at end of file
diff --git a/api/search.index/1b8494a41a.js b/api/search.index/1b8494a41a.js
new file mode 100644
index 000000000..fda7a057f
--- /dev/null
+++ b/api/search.index/1b8494a41a.js
@@ -0,0 +1 @@
+rn_("ocwAAC8i0cIAAEQcIcIAAIETxxYrAilOp80NbnVbA8wAACKgbG11JQHIAAAWsCJkaR1vIiUBygAAFsEiZEEgmiIlAcoAABbAImRAIJki+4UFAsQAABZ8IhNgIm90JQHGAAAWniJkABtTIu8H/ZFwCcsAACB0ygAAIDA=")
\ No newline at end of file
diff --git a/api/search.index/1b87352835.js b/api/search.index/1b87352835.js
deleted file mode 100644
index 406c56cce..000000000
--- a/api/search.index/1b87352835.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLBAAASyxociyFmbgUCxAAAESsdFQggaXP7AmxvBQLFAAASxx4ToB9rbhsCygAAIHFjdTMA/QUABsYAAB0sxgAAHS3huAkAAPAJAAAgIcAAAKsWqxxrA9YAACLFYWVz")
\ No newline at end of file
diff --git a/api/search.index/1bd9cc697f.js b/api/search.index/1bd9cc697f.js
new file mode 100644
index 000000000..0c684c4cb
--- /dev/null
+++ b/api/search.index/1bd9cc697f.js
@@ -0,0 +1 @@
+rn_("BQLAAAAXKyIyqRyqHMofb3kFAsAAACXkHjAhFPwgaXmhxAAASh2XAgDAB8HFAAAircYAAByixAAAHc7noBAAAKMTAADwFAAAAxUAAC8cAABnHQAADCEAAGkiAAABMQAQAUQ7MAAAAQAAGAECAKQWAQBlGRYB+4M=")
\ No newline at end of file
diff --git a/api/search.index/1c13c85a7d.js b/api/search.index/1c13c85a7d.js
new file mode 100644
index 000000000..736cfc2b7
--- /dev/null
+++ b/api/search.index/1c13c85a7d.js
@@ -0,0 +1 @@
+rn_("RQHAAAAz/hurHUYidDkcOhx7HHwcIcIAAAggjiLzA5DqaxAAAIcQAADWGgAA4hoAAPcbAADWHgAAch8AAKkfAADgHwAABSIAABQiAAAFAAEQARAVAsMAABZHIhLNIWJyJiEjhwLDAAAhd2ZzOwPGAAAdNGFvciHBAACtFq0cBcDABIQAABjeHSGGE6MWGSEgFQHEAAAQMyBzxh9BwAAA1gnAC8ELex+hxQAAsCEVAcAAABSvIWPKHRUByQAAFnEiYu8h84PCCECrxAQhxwAAIHfCAAATqiUBygAAFr4iZDEilyIFAsEAABLtGhqFIGFrpQHGAACmbSFmRh0VAc8AABZmImbFIcMA/QQBA8oAACB+yQAAIWsB0CEAAOvAAqHDAAAe2PcLAP0xiQfHAAAdNcIAABOKOzAAAAEAABIBEwCbAQIAvwH1AA4FAAAiBQAALgUHAFUJAAC9CQEA7wsAACQMAACOEwAAlxMAAGY [...]
\ No newline at end of file
diff --git a/api/search.index/1c150ad227.js b/api/search.index/1c150ad227.js
new file mode 100644
index 000000000..3e9d1977e
--- /dev/null
+++ b/api/search.index/1c150ad227.js
@@ -0,0 +1 @@
+rn_("UcgAALAfXiBfIOkhZSIjAgPEAAAhJ8QAACH8YWdy66sQAADmGgAAWhwAALweAADhHgAA3R8AAOcfAABvIAAADyEAAFQiAABiIgAAqCIAALMhAmEAEQ==")
\ No newline at end of file
diff --git a/api/search.index/1c77cdf2ad.js b/api/search.index/1c77cdf2ad.js
deleted file mode 100644
index 835d5e9eb..000000000
--- a/api/search.index/1c77cdf2ad.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQPGAAAxYSCTIE4iFoMiGJMiaXN0DB+xyQAAdyEhxAAA2hwIIKUBwQAApBAhbdQfEwQCwQAAIENpcuRsHQAA6x4AAC4gAABnIAAAxCEAABEAAPMA/RQhAORQHAAAfBwAAIcfAADuHwAA/R8AAAEREA==")
\ No newline at end of file
diff --git a/api/search.index/1c87074b0a.js b/api/search.index/1c87074b0a.js
deleted file mode 100644
index a7fa8ab28..000000000
--- a/api/search.index/1c87074b0a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAV1x4U8SFjcxUBwgAAErAibZkiI4cCxwAAIrZhayMOAskAACKjYWMBtCEAACvABGB9ZJr/0sQAAB6l+4Y=")
\ No newline at end of file
diff --git a/api/search.index/1d35e59d01.js b/api/search.index/1d35e59d01.js
deleted file mode 100644
index 366b1f26a..000000000
--- a/api/search.index/1d35e59d01.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocMAALMeIcMAALIeFiIFjMAAACJTHcghKdMhhyLjAP0hgQDEAAAhnu5IDwAAuxoAAOIaAABSHAAAtBwAAKUdAADnHgAA9x8AAAIgAABHIQAAmyEAAPshAAD9IQAACiIAAEYiAAAAEBEREBABAA==")
\ No newline at end of file
diff --git a/api/search.index/1d4f5e7b6e.js b/api/search.index/1d4f5e7b6e.js
deleted file mode 100644
index b5e8e4dc9..000000000
--- a/api/search.index/1d4f5e7b6e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQPAAAAWDyATCx8TFCFiaWrNGgMbICAhIAMhByGlgsMAACEAIiAiLSKlgscAABTMISogKwLAAAAgWGR6IcYAAJAeUiHxwgAAqRu3CQD9HEkDwAAAE53BAAAWscMAAB07+Z8WAAABALYCPAMwAvMABAAFAKUA")
\ No newline at end of file
diff --git a/api/search.index/1d55f28699.js b/api/search.index/1d55f28699.js
deleted file mode 100644
index 3ab403a31..000000000
--- a/api/search.index/1d55f28699.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("oc4AACIgBcjCYEAAAKcIIRNxIkLcHN0cGR0aHaLeHHWBxgAAFSciJiEnISghKSG6IbshvCEhxgAAYCGaIvMCAmR25WcbAAA3HQAADR8AACoiAABPIgAAlCIAADAAAMHKAACPIAUCwgAA4l4d5Pcea3bhygAAiSChxAAABRz7wAhD+wJlbSHSAABgIqYiWwPNAAAiEWxvcqHDAADNEAFCOzAAAAEAAPYAAgBoEAAAxBP1AAFA418OAADDFgAA4hwAAL0eAAAAUCUBxQAAJmoibyJi6CHtIaUBwQAAFH0hZoQipQHCAAAUpCFmiiL7iaHDAABUIDHFAADTHkYgRyB3AQHCAE3gAAAd3Pa5GwAAfQGdALgBCAIDAFUBwgAAExchbn0a0xsFHAYcyR/7A2VseFUBxAAAuEghZKMT8xT0FDMduh8bAswAACJZcnQVAcEAAKQRIG2IHvMChIJOHQAApQHBAACkviFteyHzB4T [...]
\ No newline at end of file
diff --git a/api/search.index/1d7da1fdce.js b/api/search.index/1d7da1fdce.js
deleted file mode 100644
index 8bc52be34..000000000
--- a/api/search.index/1d7da1fdce.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQIBwgAAHR5qOzAAAAEAAPUAAgDFDgAAgxL0AAEAAeIAABwXc+5PDgAAZRsAAFMcAADCHAAAIx0AAKcdAACLHgAA6R4AAI8fAAChHwAAsx8AANgfAABFIQAAIyIAAKMiAAAREwAAAAEAAGvABgTMAAAhBA==")
\ No newline at end of file
diff --git a/api/search.index/1d9d759cf2.js b/api/search.index/1d9d759cf2.js
deleted file mode 100644
index 6c480dcb6..000000000
--- a/api/search.index/1d9d759cf2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQQBxgAAIBlyiZobAAAbAsEAABByYXkBQOQzDgAAXhwAAH4fAAApIAAAlSEAAIiAACHFAAAbIEIhFQHDAAAWuiJkjSITAgLDAAAb7nN04bMOAAA5DwAAAwGIAsYAACFl6AAAHpJyc6HKAACOIhUBwAAAFDghY1cg8wMBcwHDHwAAEwECxwAAIPRmcgFqEAAAocMAALMeIcMAALIeFiIFjMAAACJTHcghKdMhhyLjAP0hgQDEAAAhnuq7GgAAtBwAAKUdAADnHgAA9x8AAAIgAABHIQAAmyEAAPshAAAKIgAARiIAAAEREQEBACsCwgAAHapmc/sCY24BBQHFAAAhHXKJlx0AAKHGAABAIfMFAXDiNhwAADIgAACJIAAABVD7AmxyMcQAAPsg/CD+Ibc/AP00ZRfHAAAdwsQAACAc5BoFAABWCQAAdRAAAPMbAAAGHQAAEgEQ")
\ No newline at end of file
diff --git a/api/search.index/1e0d996660.js b/api/search.index/1e0d996660.js
new file mode 100644
index 000000000..1a9022450
--- /dev/null
+++ b/api/search.index/1e0d996660.js
@@ -0,0 +1 @@
+rn_("IcYAALkivyLzBAFk5c8eAADNHwAAFyIAADMiAACKIgAAmCIAABEBABMDAsMAACKLY2z2ARsAAAEArwEgAf0A4wA=")
\ No newline at end of file
diff --git a/api/search.index/1e4ed3cdaf.js b/api/search.index/1e4ed3cdaf.js
deleted file mode 100644
index 92f04e133..000000000
--- a/api/search.index/1e4ed3cdaf.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHDAAAgeyDCIXIdIAUCwQAAFHsiFYYicXMjBgLEAAAhnWFy5s0dAADjHgAAkR8AAPUfAAABIAAAfyEAANghAAADEQAA+wJwdiUByAAAMKceqB6GIHMtIHQh4cIAAOIc+wJmc/uKNQHAAAAUfSFmbSGEIoUiIcEAAKUfASL7AnJzFYHIAAAVmCFlIBUB0QAAFskiZLki8wECZHMBug4AABOBAsoAACIrY2kBAQHDAAAhpGbjuxQAAG4dAADQHwAAiiIAADAxocIAAOMfFQHKAAAWwyJkqCIxyAAACiILIkYiMcMAAB4hHyGyIfsDcHR1JQHGAAAWyiJkrCLHIlMEA8UAACH9ZW1zAT8iAADzgQJpbvsCcnTXAQD9CUgBxQAAIqXhgyEAAGUiAAAQ")
\ No newline at end of file
diff --git a/api/search.index/1ea0c049dd.js b/api/search.index/1ea0c049dd.js
deleted file mode 100644
index 48f476317..000000000
--- a/api/search.index/1ea0c049dd.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQPGAAARTiIWgyIYkyJpc3QrAsMAACHEY27zBQFzAdEbAAAVAc8AABa7ImSSIhUByQAAFpEiZDwiFQHMAAAWtSJkgiIVAcwAABa0ImSBIvuF84PAAIYr/QA4CMUAACHyzAAAIqTBAAAU06UCxQAAFhghGOshYnecHPuZ")
\ No newline at end of file
diff --git a/api/search.index/1f4646083c.js b/api/search.index/1f4646083c.js
deleted file mode 100644
index 6d65c9368..000000000
--- a/api/search.index/1f4646083c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocYAALsfBQLIAAAXEyITAiJlcGWCwAAAFbofUw/qGlAdUR22H7cfAQCEwQAAE6/lGQwAAIkOAACKEwAA6BwAABUgAACNIQAAAQUQQcIAAD0dnB4bIEIh+wJkbV8D/XEABsIAAB1HwgAAHJM=")
\ No newline at end of file
diff --git a/api/search.index/1fc8cdbf95.js b/api/search.index/1fc8cdbf95.js
deleted file mode 100644
index a670bcf5f..000000000
--- a/api/search.index/1fc8cdbf95.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLBAAAVSiAWOiFmbjUBwAAAFAkicPQfPiEeIgWJwAAAF0AiEW4hocQAAOkhBYnEAAASiyIRhSIjhQLgAAAiCGRmBQLEAAAWeiITXiJvdBsCzQAAIp5ob8dsAP0vmAfGAAAd3MQAAB9vwgAAIZfXAAAixcMAACHv54wQAAAmHQAAdB8AAH0fAAAqIQAAgSEAAKohAABJIgAAIBAAAA==")
\ No newline at end of file
diff --git a/api/search.index/1fe25f46f2.js b/api/search.index/1fe25f46f2.js
new file mode 100644
index 000000000..0781ddf19
--- /dev/null
+++ b/api/search.index/1fe25f46f2.js
@@ -0,0 +1 @@
+rn_("FQHRAAAWvCJkjyIVAdgAABbLImS7IhUB0AAAFsIiZKEiFQHIAAAWtSJkeiIVAccAABaxImRwIvODAnJzFQHMAAAWtCJkeSIVAcQAABa5ImSKIhOJAsMAACKLY2wVAcgAABawImRvIhUBygAAFsEiZJoiFQHKAAAWwCJkmSL7hRUBxgAAFp4iZFMi84EDZW1u+wJkb/OGwAYoFQHIAAAWQCJkfyAVAcwAABa+ImSXIhOJAsMAACIlZGsVAckAABacImRRIhOEwAhMyQAAIl7LAAAibccAACI/GwLTAAAilmZsFQHaAAAWyiJksyL7g2dNAP4AH6QdbZOk4HrLAAAhx03sJFxGywAAIcnCAAAcpTyCkzICAXUgAAAFAsEAABR9IhWIInFzIwIDxAAAIZ/CAAAeqGFydjswAAABAAAmABEAtBYAAKUaDQCyHAMApR0BAM8dAACPHgAAxh4AAOUeAwD1HgAAkx8BAPcfAQA [...]
\ No newline at end of file
diff --git a/api/search.index/1fedb8f0e2.js b/api/search.index/1fedb8f0e2.js
deleted file mode 100644
index a37739936..000000000
--- a/api/search.index/1fedb8f0e2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAXKSIypxyoHMgfb3kFAsAAACXiHi4hFPogaXmhxAAASB1XAQHAA8HFAAAiq8QAAB3M5qETAADuFAAAARUAAC0cAABlHQAACiEAAGciAAATEAEA")
\ No newline at end of file
diff --git a/api/search.index/2046bd8223.js b/api/search.index/2046bd8223.js
deleted file mode 100644
index ad52371b2..000000000
--- a/api/search.index/2046bd8223.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAA0sh90IGUhIsMd0B5wdSHDAAASIXMhpQHGAACg/R9z8B5RwgAADSAOICQgHSGRIfOBhlUBwQAAuEghZKMT8xT0FDMduh+hxAAAHCL7AmFjAUI7MAAAAQAA9gACAGgQAADEE/UA8wABbTswAAABAAD4AAMAwwkAALwK9gCxGgAANQHAAAA1uh0AHwEfd2IQYxANIiWCwQAAMWwbuB25HWwQMR37/kAKyAE=")
\ No newline at end of file
diff --git a/api/search.index/20f394eba0.js b/api/search.index/20f394eba0.js
deleted file mode 100644
index e91dd6a79..000000000
--- a/api/search.index/20f394eba0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHRAAAWyCJksSJhxAAADx0QHREd6h6iH1YiFQHCAAAWxiJkrSLzAAFtAXkTAAAFisAAAKFXHRhiIiHDAAD5H0MiBYrAAAATiSIRVh0BQea1GgAAvhoAAMAcAAC8HgAAxh4AAEQgAAC1IQAAARAAABUBygAAFroiZI0iMcQAAEwdTR1VISHGAAC3Ir0i8wIBZOXNHgAAyx8AABUiAAAxIgAAiCIAAJYiAAARAQD7AmRuNQHFAAAWDCJiSh1LHSYg+4lH/wD9pykXxAAAIifCAAAdI8sAACJ1OjAAAAEAAAAAADUAEAAAAFIP1xDrFMoa1Rr1Gvca/xoAGyUcJhwnHH4cfxyZHK0crxwvHTAdfB19HX4dfx2AHYEdgh3PHd0d3h3fHYUezB6vH8EfByBBIEIgYiBoIAYhJiEnISghKSFxIXIheiGIIaEhuiG7IbwhxSFwIg==")
\ No newline at end of file
diff --git a/api/search.index/2126c8bb24.js b/api/search.index/2126c8bb24.js
deleted file mode 100644
index 3e82bd261..000000000
--- a/api/search.index/2126c8bb24.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHFAAAWZyFiPx0FAsEAABJAHRI+HWJ08wABdOKUEwAA1hQAAMYcAAABACHFAAA9HZweRcLCgiAAADT7IPwg/iGqjiIlGyBCIRUcIPMb9BsGHQcdK4bDAAAemzHDAADyGwUdDiEVAsQAAB+kIqLcHmNymxwFicAAADOFHYYdDCEZeiD3HAD9NJgTxgAAHt7CAAAdCOJzEAAAtRAAAAEcAAAQAA==")
\ No newline at end of file
diff --git a/api/search.index/213fa525bf.js b/api/search.index/213fa525bf.js
deleted file mode 100644
index 0691a1d86..000000000
--- a/api/search.index/213fa525bf.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHRAAAWyCJksSIjhALLAAAidWZ3NQHFAAAWYiFiOB0OHw8fRQLAAAAXFyIV/yFmdFkd9B5kIE0hBQLAAAAkNx0NHxZxIm9yoc8AAHwiFYLGAAAUEiG+HXcFAcILyMIAAB1uxAAAIkfkZRAAAL8TAAAJHQAAUiAAAEghAAACECAlhMIAABGBIeAfViD7AmVsWwPHAAAiOGlydQ==")
\ No newline at end of file
diff --git a/api/search.index/2181d328c8.js b/api/search.index/2181d328c8.js
new file mode 100644
index 000000000..16575bef0
--- /dev/null
+++ b/api/search.index/2181d328c8.js
@@ -0,0 +1 @@
+rn_("BQPAAACitR4S0x4XPB1hb3IxwwAAtB5IIRgiBYzAAAAiVR3KISnVIYkiIccAANYech8FAsYAABnCIRnDIWN2BQLAAAAUkhMdFiFvcgUCwAAAFKAhHHkgY2z3CwD9PaEOxAAAGtPJAAAe2cMAABORyQAAHto6MAAAAQAAAAAAHQAQAAAAowGkAaUBngRKD70a5BrlGlQcthy3HKcdqB3pHuoe+R/6HwQgBSAgISEhSSGdIZ4htCH9If8hDCINIkgi")
\ No newline at end of file
diff --git a/api/search.index/21a77c9df9.js b/api/search.index/21a77c9df9.js
new file mode 100644
index 000000000..283d99c49
--- /dev/null
+++ b/api/search.index/21a77c9df9.js
@@ -0,0 +1 @@
+rn_("BQPAAAAViiEeEiIomiDDIWVpbaHFAADxGhWEwwAAE2ohsh8FAsMAABqOIh2rImV0IwQCxQAAIZticAHNHQAAFQHAAAAW9B5ishPzgQJudBMAAsYAACAbY3LhnBsAAPshAACABQLAAAAUdiASxR1wdQWGwQAAQg8gECAmIB8hpvIe84ECcXNRyQAAzx2TH5QfgSHaIQUCxAAAISUhuSEV9SFlchMHAsEAAB7xYnLhvRwAALAdAAAQocQAAMAWAUSJYBwAACHJAAA4IcshW8QCBMoAACB3QcYAAEAiniLDIsoiIwACwQAAHoxhZOqCGgAAABsAAH8gAAAeIgAAOyIAAFMiAABcIgAAdyIAAIAiAACiIgAAsyIAAAABEAAQADHGAAC7HLwc+SAFAsAAAKPvGkeYIJkgnCHCIW1uawPCAAAc82FvcgUCwQAAJowhqyIU/xtjaQEA/sBvrB/LAAAgKxXPOyZqEnEM9bwtEQK [...]
\ No newline at end of file
diff --git a/api/search.index/22266a710e.js b/api/search.index/22266a710e.js
deleted file mode 100644
index 15452e600..000000000
--- a/api/search.index/22266a710e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcEAAIsQPRyCIfghocYAAEEgscIAABccpQHFAAAVISJjpiEVAckAABZqImLoIVOFwghA4AAAHb/zggJkaeOB/YABBscAACIQ")
\ No newline at end of file
diff --git a/api/search.index/226e624177.js b/api/search.index/226e624177.js
new file mode 100644
index 000000000..da1514a83
--- /dev/null
+++ b/api/search.index/226e624177.js
@@ -0,0 +1 @@
+rn_("ZQHDAAAWxSJkvyFKIn4ifyKmIqoiRQHDAAAWviJkjhqOHjEilyIjAALEAAAhImFu9P4bAACtAWcENAA7jskAAB3J")
\ No newline at end of file
diff --git a/api/search.index/22ff7fb000.js b/api/search.index/22ff7fb000.js
deleted file mode 100644
index 0c3515d6f..000000000
--- a/api/search.index/22ff7fb000.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAAAV6BpzyAthwwAAmhabFpwWnRb6GvsaBQLAAAARqiIbuR9kbhUBygAApEwibTAiJQHGAACk6SFtqiFJIjvACEjMAAAiJhsC4AAAGuhkcvMAlvOLCQAAQRE7AUHDAACWIJcgmiHAIaHKAAB0H/MAwSAF6hwOAABuEAAAeBAAAJATAACbEwAAyxoAALccAADTHAAAZh0AAHwgAAAhIgAAkAAAFgAA")
\ No newline at end of file
diff --git a/api/search.index/235b1f56fe.js b/api/search.index/235b1f56fe.js
deleted file mode 100644
index 95d7ea8a0..000000000
--- a/api/search.index/235b1f56fe.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocQAALceJQLDAAAXDSIVyiFiZhgggCIVAcYAABX8IXIAIEHHAAC/H44hjyEOIvMDAmZs47MTAACYFQAAPSAAAJUgAAAGADWBxQAAFYwh8xrPG9Ab+/0hgAQ=")
\ No newline at end of file
diff --git a/api/search.index/237bb139b9.js b/api/search.index/237bb139b9.js
new file mode 100644
index 000000000..537869c2c
--- /dev/null
+++ b/api/search.index/237bb139b9.js
@@ -0,0 +1 @@
+rn_("FQHFAAAV/iFyAiAlAcMAABawImRpHW8i+4ZBxwAAwR+QIZEhECIBBgLEAAAiKcgAACJkYXLmmxwAAH4dAADDHwAAaiAAACghAAC8IQAAxyEAAAYAMgAhxgAAYiGcIqMAwQaAywAAIi7BAAATkOVpGwAAOR0AAA8fAAAsIgAAUSIAAJYiAAAwAAAVAcsAAKhqIncEIfsCbHRzAP0hSADCAAAWpuS1EwAA7BQAAJoVAAA/IAAAlyAAAABgAA==")
\ No newline at end of file
diff --git a/api/search.index/23a5b23851.js b/api/search.index/23a5b23851.js
new file mode 100644
index 000000000..75388fa97
--- /dev/null
+++ b/api/search.index/23a5b23851.js
@@ -0,0 +1 @@
+rn_("QcgAACQiJyI9IkQiQcIAABchJCFmIXEhBQLAAAAcqyIdgiJhaAUCwAAAGY4iF6shbnIHHYL9HwAexgAAIkPHAAAiRscAACJN1AAAIrrLAAAicisCwQAAIgRvcg==")
\ No newline at end of file
diff --git a/api/search.index/23abcbb4d0.js b/api/search.index/23abcbb4d0.js
new file mode 100644
index 000000000..55cd3cd23
--- /dev/null
+++ b/api/search.index/23abcbb4d0.js
@@ -0,0 +1 @@
+rn_("AUE6MAAAAQAAAAAAEAAQAAAAchB4EMgQ7RvyG9seqx+sH7Afth9eIF8gdyAVIegh6SFlIkUBwgAAFBYidJwT5RTWIdchsccAAN0fpQHCAAAXgiFtIhyhxwAAViChwwAA7hvzAMCMAQGcEAAA+44=")
\ No newline at end of file
diff --git a/api/search.index/23d7093e70.js b/api/search.index/23d7093e70.js
deleted file mode 100644
index 91d7b0038..000000000
--- a/api/search.index/23d7093e70.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("pQHDAAAUyR9mXSIxwAAA8A5vG44epQHGAAAULyFmeSIVwMANAAAAFuAdGE0hFLke7w6nAwH9LEAGywAAIh/OAAAiWfPaCQAAHgv1CQ==")
\ No newline at end of file
diff --git a/api/search.index/23dc800960.js b/api/search.index/23dc800960.js
new file mode 100644
index 000000000..59078d383
--- /dev/null
+++ b/api/search.index/23dc800960.js
@@ -0,0 +1 @@
+rn_("BQLAAAAToh4ViCFtdKHHAAACIfuDg4PADkrMAAAiWs0AACI1wAAAG6fPAAAidsMAAB2NdQPGAAAxwhzDHL4eElgdolkdaWxy9xqAHIEcMR0yHXMhdCGhxQAAwxZRxgAArR9kIfIhbCJxIhMA/ABYxAAAIiPDAAAe0uzaEAAApxYAAP4aAABvGwAAKx0AADodAADRHgAAEB8AALofAACoIQAAsCEAAOohAADvIQAAABEAAQEQAKHCAAC+GwWRwAAAEw8dFaUf0wDACWTCAAAdOMMAAB2+9lAPAAA/BHQHAQC1AgQAE4ECxgAAHqtldCUBzAAAEIggcy8gdiH7hhUB0QAAFrwiZI8iFQHYAAAWyyJkuyLzhwJyduHFAACaGjUCxwAAJocgiyES1B1icgEcJh2JIRXBwQAoAACkaiISVyIWZCBdIOHDAADeFPsCbnQFA8IAALhgIKfuHxaLH2VtdSsCygAAH8NvciHHAAA [...]
\ No newline at end of file
diff --git a/api/search.index/23e3afe498.js b/api/search.index/23e3afe498.js
deleted file mode 100644
index 2a6ee45cb..000000000
--- a/api/search.index/23e3afe498.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLCAACi3Byi3hxzeSHSAABgIqYiGwLJAAAhYGxyJQHFAAAmaiJvImLoIe0hpQHBAAAUfSFmhCKlAcIAABSkIWaKIvuJocMAAFQgMcUAANMeRiBHIHcBAsIATeAAAB3c9DYdAACdALgBCAIVAcsAABbIImSxIvv9AUEB")
\ No newline at end of file
diff --git a/api/search.index/24605391e6.js b/api/search.index/24605391e6.js
new file mode 100644
index 000000000..a5603bc1f
--- /dev/null
+++ b/api/search.index/24605391e6.js
@@ -0,0 +1 @@
+rn_("AUDq0wsAAG8QAACREwAA+xQAAMUaAAARHQAALh0AAKMeAADsHgAApB8AAFgiAAAQAAIBAAA1AcEAABanImSFIYYhZyL7AmVu")
\ No newline at end of file
diff --git a/api/search.index/246d0f9320.js b/api/search.index/246d0f9320.js
deleted file mode 100644
index 2d69e39ac..000000000
--- a/api/search.index/246d0f9320.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ccEAAKofrh9cIF0g5iHnIWMiocIAANQhsccAANsfpQHCAAAXgCFtIByhxwAAVCChwwAA7BvzAMCMAQGaEAAA84OO")
\ No newline at end of file
diff --git a/api/search.index/24b560cdfc.js b/api/search.index/24b560cdfc.js
new file mode 100644
index 000000000..ceb5ecb92
--- /dev/null
+++ b/api/search.index/24b560cdfc.js
@@ -0,0 +1 @@
+rn_("ocQAAKMeJQHIAAAWtSJk0yF6IiUBxgAAFrEiZK4hcCLzAIj5Rw8AAIQL2QEiAeQBXAABAEQAkAElAc8AABbMImSuIskidQHAAAAmbiKdImSJHYodix3/IAAhyCFSIjHIAAB6IHsgByL7AmVzRQHHAAAYZSJnYiJjIqgiqSIBRuVWHQAAGyEAAFghAABoIQAAbSEAAGYiAAAQkBAlAcYAABbDImRcIqIiFQHGAAAQCSFzwB8jgQLBAAAcXmFkocQAALkc+wJvcvc9AP002AfFAAAh0OfBDgAASA8AAFkPAACgHAAAPh0AAEYdAADFIQAAZCIAABEAAQATAALBAAAOxGVsgroBAAA=")
\ No newline at end of file
diff --git a/api/search.index/24bceb3a7e.js b/api/search.index/24bceb3a7e.js
deleted file mode 100644
index 09b9848bd..000000000
--- a/api/search.index/24bceb3a7e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQUBwwAAIpBm56oeAAD/IAAANCEAADshAAA/IQAAQyEAACYiAADEIgAAYAAAAbHIAABIIfMAAmRu9aMTAABQAQEAPwiHAg==")
\ No newline at end of file
diff --git a/api/search.index/24f8a724ba.js b/api/search.index/24f8a724ba.js
deleted file mode 100644
index a4cdfcd72..000000000
--- a/api/search.index/24f8a724ba.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcgAAJggwSEhwwAA1xDVGhUBzQAAFsYiZK0iWwPMAAAiEG9yczUBwAAAFq4iZGcdbSKJIjWEwwAAFxMh4xvuHO8cO8ACIcMAACGI+wNlaW0=")
\ No newline at end of file
diff --git a/api/search.index/250af5e322.js b/api/search.index/250af5e322.js
new file mode 100644
index 000000000..b10a54712
--- /dev/null
+++ b/api/search.index/250af5e322.js
@@ -0,0 +1 @@
+rn_("IcQAAM4aCRwlAc8AABbMImSuIskiRQHHAAAYZSJnYiJjIqgiqSIBRuVWHQAAGyEAAFghAABoIQAAbSEAAGYiAAAQkBAlAcYAABbDImRcIqIiFQHIAAAQCSFzwB+hxAAAuRz7Am9y9wIB/TTIAMUAACHQ5cEOAABZDwAAoBwAAD4dAABGHQAAxSEAABAAEPsCZ3M=")
\ No newline at end of file
diff --git a/api/search.index/250b4b9bde.js b/api/search.index/250b4b9bde.js
deleted file mode 100644
index a31c2b9f5..000000000
--- a/api/search.index/250b4b9bde.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BYnAAAAXQCIRbiEFicQAABKLIhGFIiOFAuAAACIIZGYFAsQAABZ6IhNeIm90GwLNAAAinmhvNwGEwA5pwgAAIZfXAAAixcMAACHvxAAAIgkTgQLIAAAiomVsBYnAAAAXPyIRbSEFicQAABKKIhGEIiOFAuAAACIGZGYFAsQAABZ5IhNdIm90GwLNAAAinWhvNwGGwA5pwgAAIZbXAAAixMMAACHuxAAAIgejAP0tgADFAAAcoMcAACBkyAAAIH4BTA8AAA==")
\ No newline at end of file
diff --git a/api/search.index/25f5ef22a3.js b/api/search.index/25f5ef22a3.js
deleted file mode 100644
index 094b2dcc0..000000000
--- a/api/search.index/25f5ef22a3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocIAAJcWFQHEAAAWGSFmnhwVAcEAABO9FnR+GvsDZW9yZQHBAAAWuiJkphCWFlMhVCH3IY0iKwLBAAAhN3R6ocQAAMYaIcQAAMIfaiF3AQD9MCEEygAAIccBUSEAAA==")
\ No newline at end of file
diff --git a/api/search.index/2601688a5a.js b/api/search.index/2601688a5a.js
deleted file mode 100644
index 95b44e999..000000000
--- a/api/search.index/2601688a5a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McsAALodAB8BH0WEwAAAowkcCx0MHXsffB8VAcMAABAIHHPPIaHBAACDHfMBA2luc/V/EwAARgMcBrMA4gQhwAAAWCJ0IgWJwAAApeMfEqUfFQHEAAATFyFu0xsFAsAAABXiHyanH94fbG4FAsAAABN2ImN8HH0chx+IH+4f7x9sdQUDwwAAGEsiEmQhGDsiY3V3IwQCxQAAIBdicAHSGgAAMccAAOwhNCI1IvsCbHT7ifMA/TSAAuXgCQAA2AsAAF0cAADUHQAA9x4AADwhAAAABVB7/RAQBsIAABzg")
\ No newline at end of file
diff --git a/api/search.index/2604c666e9.js b/api/search.index/2604c666e9.js
deleted file mode 100644
index f179ee991..000000000
--- a/api/search.index/2604c666e9.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQLBAAAlih8rIqlBIGx1pw6oDoIcTB1NHVUhFQHAAAAipRzOHXJKD1UDwQAAtWgdunchQwwcDRy9HXogb3N09g73DvgO+Q5zH28BxBBkygAAIhTBAAAiFA==")
\ No newline at end of file
diff --git a/api/search.index/264d09a621.js b/api/search.index/264d09a621.js
new file mode 100644
index 000000000..37ee2fd63
--- /dev/null
+++ b/api/search.index/264d09a621.js
@@ -0,0 +1 @@
+rn_("wcoAAJEgJZDAAAAkhCH6IfMbwh0FAsIAAOJgHeT5Hmt24coAAIsgocQAAAccIccAAAUiFCL/Cv4ADOYBwgAAIgPCAAAhBg==")
\ No newline at end of file
diff --git a/api/search.index/265c3a7d7d.js b/api/search.index/265c3a7d7d.js
new file mode 100644
index 000000000..622084910
--- /dev/null
+++ b/api/search.index/265c3a7d7d.js
@@ -0,0 +1 @@
+rn_("scYAACccpYLIAAAUziEsICHGAACSHlQhM4IDwwAAHT1kaXLzAAJpczswAAABAACVAQQAZwf0AJoJAACXHAAA4x2eAKWCywAAFM4hLCDzAYQ7MAAAAQAAnwACAJccAADjHZ4AxQLAAAAZux8VICBjd0Ac+wJnaTHPAAC6IbshaCIVAcUAABZpIWJBHQUCwQAAEkIdEkAdYnTzAAF04pYTAADYFAAAyBwAAAEAIcUAAD8dnh5FwsKCIAAANP0g/iAAIqqQIiUdIEQhFR4g9Rv2GwgdCR0rhsMAAB6dMcMAAPQbBx0QIRUCxAAAH6Yiot4eY3KdHAWJwAAAM4cdiB0OIRl8IPccAv00mBPGAAAe4MIAAB0K4nUQAAC3EAAAAxwAABAA+4ahxAAATiITAALgAAAirG1z6bcaAADAGgAAwhwAAIUdAAC+HgAAyB4AAOMfAABGIAAAtyEAADIiAAABEQAAAPvADIQ=")
\ No newline at end of file
diff --git a/api/search.index/268166f349.js b/api/search.index/268166f349.js
deleted file mode 100644
index e14f5c99f..000000000
--- a/api/search.index/268166f349.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHSAAAWwiJkoSIVAdQAABbDImSoIhUBzwAAFsoiZMciFQHGAAAWwSJkoCJTjAPGAAAip2VscIcDg/0o0ATKAAAiUtMAACKmygAAIlMFAsIAABNrHRqHIWRuRQHEAACmtCJk9CH1IYEigiL7A2Fpcg==")
\ No newline at end of file
diff --git a/api/search.index/26b8a6594a.js b/api/search.index/26b8a6594a.js
new file mode 100644
index 000000000..ddf559207
--- /dev/null
+++ b/api/search.index/26b8a6594a.js
@@ -0,0 +1 @@
+rn_("JQLDAAAVPiAWVyJ0d24gRiEVgccAABysIqEhIwTBAKDBAAAiOMUAACAOAbUhAAAbAswAACHPY3QVAsMAABYMIBYNIGJvyhoTgQLNAAAhj2FjAUI7MAAAAQAA9gACAIkTAADBF/UAhw4A/TGQB8sAACALwwAAFpvIAAAdutAAACIrOzAAAAEAAPkABADwCQEA9AsAACMN9QDiEAAAAQD9ABUBwgAAE43CAAATjsMAABamxgAAHJntxwkAALgLAACqEwAAtxMAAJsWAACxFgAA+BsAAKccAADQHQAA0h0AAMIfAAAUIQAAdSEAAM4hAACgAAEAAQAA+wJydzHAAAD8G/0bjx8rwAxExQAAIrpuG8s2MMQAAByZFQLBAAAXCyASYhBhcu8J8wCLAaIBAAA=")
\ No newline at end of file
diff --git a/api/search.index/26ea17d3f6.js b/api/search.index/26ea17d3f6.js
deleted file mode 100644
index dc37dce97..000000000
--- a/api/search.index/26ea17d3f6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McUAAIQgTiFPISUBwgAAFsoiZKwixyIVAcgAAKRMIm0wIvOBAnJ0JQHGAACk6SFtqiFJIrMAwghIzAAAIiY7MAAAAQAAoAADAMMOAADiEJ4Aeh8AAA==")
\ No newline at end of file
diff --git a/api/search.index/2797b82063.js b/api/search.index/2797b82063.js
new file mode 100644
index 000000000..54dd7e0bb
--- /dev/null
+++ b/api/search.index/2797b82063.js
@@ -0,0 +1 @@
+rn_("FYbCAACmHiKpgCLbG0HAAADYC9kL4hxcIFHGAACtH2Qh8iFsInEi8wABYuanFgAAbxsAADodAAAQHwAAuh8AAOohAADvIQAAAQEAAPMEAXLyjxMAACoKBQLAAAAUSSISwRRveQWJwAAAE6YfFAEi8cYAAE0gJQHEAAAWxCJkXSKjIvMCAmJpATUiAAAxwwAAxx+WIDohFQLFAAAZlSGlFyBkc+wb+4mXAQD9NAFEywAAIT3GAAAiGcMAABqA+6MaAAC4AoMAswAaABAAOwDrAHgADQDpACWCwwAAMW4buh27HW4QMx2lAcEAABR/IWaGIgECAcMAACGmZuO9FAAAcB0AANIfAACMIgAAMDH7iTUBwwAAKKwf6CFnyx5WIFcgQccAAOob6xv8HKQiBYrAAAAkbRugHzTVHkggSSB1AcEAABaaHGL/CwAMMw80DzUPNg83DwEDAcUAACKcZORpGwAAOR0AAA8fAABRIgA [...]
\ No newline at end of file
diff --git a/api/search.index/27b875d96d.js b/api/search.index/27b875d96d.js
deleted file mode 100644
index d313a8357..000000000
--- a/api/search.index/27b875d96d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLBAAAcYSEZoh9jc6HOAAA5IhUByAAAFQAibJIcQcMAAPUe9h5IIPQgFYHHAAAcqiKfISMDwQCgwQAAIjbFAAAgDAGzIQAA+wNob3JnBAD9FYQHyQAAH6HGAAAio8kAAB7JyAAAHbbMAAAhzfTIFgAAvQNmAL0A")
\ No newline at end of file
diff --git a/api/search.index/27bfe309d0.js b/api/search.index/27bfe309d0.js
deleted file mode 100644
index 3d22961b4..000000000
--- a/api/search.index/27bfe309d0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcAAAMAaex1lAcEAABP0GnTJDloQWxBcEF0QixplA8AAABYPIBMLHxMUIWJpas0aAxsgICEgAyEHIaWCwwAAIQAiICItIjHAAAC3FrgW5BulgsQAABTMISogBQLGAAAXcSIVRyJmdPsCYWYhwgAADh2JHvMBA2FkcjswAAABAAB9AQYAqRMCAAMVZADPGgEABBtdABIfWgCZIFoAKwLAAAAgWGR6FQHGAAAWySJkuSLzAYEBKw8AABsC4AAAE51jcSHGAACQHlIh8cIAAKkb9wkA/RxJA8EAABaxwwAAHTv5nxYAAAEAtgI8AzAC8wAEAAUApQD7wABF")
\ No newline at end of file
diff --git a/api/search.index/2812301b6f.js b/api/search.index/2812301b6f.js
deleted file mode 100644
index 185b8892b..000000000
--- a/api/search.index/2812301b6f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHEAAAWwyJkSCKoIiMAAscAACHyY2zkwQ4AAFgPAADnGwAAjh8AAIMiAAACAABRwQAApROmE7MaQyA2IlsD4AAACdlla3k=")
\ No newline at end of file
diff --git a/api/search.index/28403c31a9.js b/api/search.index/28403c31a9.js
deleted file mode 100644
index 73d50554f..000000000
--- a/api/search.index/28403c31a9.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McAAAFAc/R/+H6HGAABAITHFAAB4IHkgBSLTAMAKSMMAABzy5TYcAACdHgAA8B4AAOIfAAAyIAAAiSAAAAAQVbHGAABeIDvBAoDgAAAQjw==")
\ No newline at end of file
diff --git a/api/search.index/286fbd80e7.js b/api/search.index/286fbd80e7.js
deleted file mode 100644
index dd3a670fa..000000000
--- a/api/search.index/286fbd80e7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAACkESBtiB7zAoSCTh0AAKUBwQAApL4hbXsh8weE9UUgAAA8AAEANAGHAGsDxQAAH6Zjb3BFhMMAABEPIqIhKCI3ImsiE4gCwgAAIaNzdEUBwAAAHQEiYosQPRyCIfghBQLDAAAmNSFcIqTWH21zBQLAAAAV0R4WpR9jbCUBxQAAFpoiZE8ilCITg8AIRMsAACHmwgAAIjMVhsAAAKYcIql+ItkbGwLHAAAfrHJzocYAAIYeAQD99PhHAWSxphx0tFcw10Ri5g/3As94NXXFAAAe0s8AACHnygAAIZIhlxHQaDQJFkfeO4HLUF3NAAAiAj0slFjPwgAAG7rCAAATuDswAAABAABbABwADwwEAK0OAAD/DioAtRYBACQcAACRHAAAKh0AAGQdAADDHQAAkB4AANAeAABwIAAAUiEAAGAhAADzIQAA+iEAAPwhAAA+IgAAbCIAAJEiAACaIgIApSIAAK4iAQCyIgM [...]
\ No newline at end of file
diff --git a/api/search.index/289ef87651.js b/api/search.index/289ef87651.js
deleted file mode 100644
index 7eb26d79e..000000000
--- a/api/search.index/289ef87651.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("YcMAAJoWmxacFp0W+hr7GgUCwAAAEaoiG7kfZG4VAcoAAKRMIm0wIiUBxgAApOkhbaohSSI7wAhIzAAAIiYbAuAAABroZHLzAJbziwkAAEEROwE=")
\ No newline at end of file
diff --git a/api/search.index/28a571ad86.js b/api/search.index/28a571ad86.js
deleted file mode 100644
index 49f575868..000000000
--- a/api/search.index/28a571ad86.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAASNyFRphCWFlMhVCH3IXR6IcQAAMIfaiHzAIYBUSEAAKHGAACeHgEGAdMAACKid+QuHAAAgyAAAIAhAAClIQAAjiIAAHAAEDHOAAB4IHkgBSJb/ABkwAAAIrBFAcUAABa8ImSMGoweLyKVIgFB508OAADCHAAA6R4AAKEfAACzHwAA2B8AACMiAACjIgAAEwABAKHJAADUIRUBxAAAExogbtQUocQAACshlz8A/XaZAsMAABTTxQAAHp06MAAAAQAAAAAALgAQAAAApgQ2D3sTfBOnE7MWvBq9GvYa2xvlG+wb7Rv3GyAcIRzHHMgcyRzKHMsczBzzHFodWx1eHV8dYB1hHWIdYx14HXkdeh3HHsoeyx76H/sf/B8vIH8ggCAhIWEhhSGZIg==")
\ No newline at end of file
diff --git a/api/search.index/28b3c5e079.js b/api/search.index/28b3c5e079.js
deleted file mode 100644
index 8a59b6e52..000000000
--- a/api/search.index/28b3c5e079.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("YcIAAGcQoBzWIdchGCIZIiUB0AAAFsIiZFsioSIBAgLIAAAh2MUAACAOcHLhDhwAAHAcAACI+wJicjv9AUEB4AAAE33OAAAiDg==")
\ No newline at end of file
diff --git a/api/search.index/29291cabe5.js b/api/search.index/29291cabe5.js
deleted file mode 100644
index 8a7f3d15c..000000000
--- a/api/search.index/29291cabe5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcQAAF0dcSAFAsIAABSpHsMwIWZzJQHRAAAWwiJkWyKhIhuJ4AAAE30BRvirHwAAawEEAEgABQCJAHoABQAjAP0XgADCAAAhE8QAACIhwwAAHtDIAAAe8zowAAABAAAAAAAvABAAAACRDpIOkw6UDpUOlg6XDpgOmQ6aDpsOnA7YEKUW/Br9Gm0bbhvmG/kbmhykHPQc9RwpHTgdPx2MHaEdoh26Hc8eAB8BHw4fDx+4HxwgHiCEIE4hTyGmIachriGvIegh7SEVAdQAABbDImSoIiUBzwAAFsoiZKwixyIhxwAAYSKnIiUBxgAAFsEiZFoioCLziwNlbHAbAsIAABvcYnKhwgAAvBsFg8AAABoOISoPIVMiIdIAAGAipiIbAskAACFgbHIVAcsAABbIImSxIluNwQAAHTYhxQAAKh1wICHHAAANIVIiCZTIAAAh/9AAACJ184ICZmz7gwWRwAAAEw0dFaMf9y8A/Sr [...]
\ No newline at end of file
diff --git a/api/search.index/2943772a38.js b/api/search.index/2943772a38.js
new file mode 100644
index 000000000..2fbfdbef0
--- /dev/null
+++ b/api/search.index/2943772a38.js
@@ -0,0 +1 @@
+rn_("wcoAADIhockAAHMhJYTFAAAhRiC3IYceCCH7hhUDxgAAMWMglSBQIhaFIhiVImlzdA4fpQHBAACkEiFt1h8TBALBAAAgRWly5G4dAADtHgAAMCAAAGkgAADGIQAAEQAA+wJjbsHFAACDHgUCwwAAw9IfFaYfcHPzAMMIYPNgDgAAnADXDA==")
\ No newline at end of file
diff --git a/api/search.index/294ea7cd0d.js b/api/search.index/294ea7cd0d.js
new file mode 100644
index 000000000..b443f2b76
--- /dev/null
+++ b/api/search.index/294ea7cd0d.js
@@ -0,0 +1 @@
+rn_("BYnAAAAXQSIRbyEFicQAABKMIhGGIiOFAuAAACIIZGYFAsQAABZ7IhNfIm90GwLNAAAin2hvNwGDwA5pwgAAIZjXAAAixsMAACHwxAAAIgk=")
\ No newline at end of file
diff --git a/api/search.index/299f31ea2e.js b/api/search.index/299f31ea2e.js
new file mode 100644
index 000000000..3500cc79a
--- /dev/null
+++ b/api/search.index/299f31ea2e.js
@@ -0,0 +1 @@
+rn_("BQLAAAClhR0YfCBsbgGC/QkAGMYAACJD1AAAIrrBAAAhcccAACJEKwLBAAAiBG9yIccAAAYiFSJjBAPFAAAgJ2JlcAHhGgAAYcIAAIcdiB39IP4gDiEAIvsCY3T7iQ==")
\ No newline at end of file
diff --git a/api/search.index/2a0fb89a82.js b/api/search.index/2a0fb89a82.js
new file mode 100644
index 000000000..4fba67aca
--- /dev/null
+++ b/api/search.index/2a0fb89a82.js
@@ -0,0 +1 @@
+rn_("FQHBAACkEyBtih7zAoSCUB0AAKUBwQAApMAhbX0h8weE9UcgAAA8AAEANAGHAGsDxQAAH6hjb3BFhMMAABERIqQhKiI5Im0iE4gCwgAAIaVzdAUCwwAAJjchXiKk2B9tcwUCwAAAFdMeFqcfY2wlAcUAABacImRRIpYiE4PACETLAAAh6MIAACI1ocYAAIged1QA/eT4A8UAAB7UzwAAIenKAAAhlM0AACIDzQAAIgQ7MAAAAQAATwAVAK8OAAABDyoAJhwAAJMcAAAsHQAAZh0AAJIeAAByIAAAVCEAAGIhAABAIgAAbiIAAJMiAACcIgIApyIAALAiAQC0IgMAuSIAALwiCQDIIgAAyiICAA==")
\ No newline at end of file
diff --git a/api/search.index/2a4a3bc0a3.js b/api/search.index/2a4a3bc0a3.js
deleted file mode 100644
index fc56089e7..000000000
--- a/api/search.index/2a4a3bc0a3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("oc0AANQhFQHBAAAUtR50FCDzggJlcwEBAc8AACGMdIviCQAAUcIAANsaOxw8HDUhXCIVAcUAAKB5HHPSGzWBwQAAFdYe7QsiDGQbBQLAAAAU2RoS2xtma/vABCT/AP0QSUDgAAAMGA==")
\ No newline at end of file
diff --git a/api/search.index/2a6c41d1d6.js b/api/search.index/2a6c41d1d6.js
deleted file mode 100644
index d878840ec..000000000
--- a/api/search.index/2a6c41d1d6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUDhlxoAAJIeAAAIBQLBAAAUkSElsh9lIXFzBQLLAAAUeyIVhiJxc6HEAABBHQFFiX4fAABnBwD9EaEDywAAIZXGAAAfseeXEwAA2BQAAPwcAABvHQAAAh8AAJUfAADKHwAA1h8AABOIiAEbA9MAACJKwQAAHSVlaGk=")
\ No newline at end of file
diff --git a/api/search.index/2a822293a4.js b/api/search.index/2a822293a4.js
new file mode 100644
index 000000000..599e165e7
--- /dev/null
+++ b/api/search.index/2a822293a4.js
@@ -0,0 +1 @@
+rn_("IcEAAHEQnRAxwQAA+BS9H74fxQLDAAAnQCEgIhBzG2ZzgxohwAAAwBMtHWUDwAAAFhEgEw0fExYhYmlqzxoFGyIgIyAFIQkhpYLDAAAhAiIiIi8iYwEDwQAAIFppbHP5oRYAAAEAtgI8AzAC8wAEAAUApQDfA/0tQATCAAAcBg==")
\ No newline at end of file
diff --git a/api/search.index/2a84b189b0.js b/api/search.index/2a84b189b0.js
deleted file mode 100644
index 3c3c63874..000000000
--- a/api/search.index/2a84b189b0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUuKViEAABsCxwAAISBveQUCwAAAw40cEosdZWwFAsAAABbFHhPaG3J1FQLFAAAWVSEUViJjdMoaocYAALQdRx0A/kQHOALPAAAiIM4AACKixQAAIsrHAAAfn9KsIgAAGw==")
\ No newline at end of file
diff --git a/api/search.index/2a95701c1c.js b/api/search.index/2a95701c1c.js
deleted file mode 100644
index 175591326..000000000
--- a/api/search.index/2a95701c1c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAAAWuyJkkiITggLDAAAiX21vQcYAALIisyLAIsIiEwACwgAAGLVkcjowAAABAAAAAAAiABAAAAC9Cb4JgRCCEIMQ4RDFFEgdSR2wHf8edx9LIEwgTSBOIE8gUCBRICshLCF3IXgheSGgIdAh0SERIh8iVyJbIncieCKfIqEiIcIAAKQO5w5bwAFgxAAAHo5r/REBAcIAABvuzgAAIYw=")
\ No newline at end of file
diff --git a/api/search.index/2a99e9ddb5.js b/api/search.index/2a99e9ddb5.js
new file mode 100644
index 000000000..6b30d10af
--- /dev/null
+++ b/api/search.index/2a99e9ddb5.js
@@ -0,0 +1 @@
+rn_("ZQLBAAAljB8tIqlDIGx1qQ6qDoQcTh1PHVchFQHAAAAipxzQHXJMD1UDwQAAtWodunkhQw4cDxy/HXwgb3N0+A75DvoO+w51H28BxBBkygAAIhbBAAAiFg==")
\ No newline at end of file
diff --git a/api/search.index/2b131468cd.js b/api/search.index/2b131468cd.js
new file mode 100644
index 000000000..5641fd165
--- /dev/null
+++ b/api/search.index/2b131468cd.js
@@ -0,0 +1 @@
+rn_("FQHLAAAWyyJkuyIbAtIAACK6YXMhxQAAJhynIgEEAcgAACHacIlyHAAApYHIAAAVoCEEIKWBxAAAFS4gIR3zAAJjdOFXEAAAaRwAADEVgcgAABWfIQMgKwLNAAAh/2FyBQLLAAAUfSIViCJxc/MIAXCJlx8AAKWBxwAAFSchvB6lAc0AABSSImbGIiMAwADCwAAAHpPHAAAhrQFWEAAA8wLABM3hwxYAAPEaAAAR+4c=")
\ No newline at end of file
diff --git a/api/search.index/2b1ce4b440.js b/api/search.index/2b1ce4b440.js
deleted file mode 100644
index 0c034a027..000000000
--- a/api/search.index/2b1ce4b440.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ccIAAHAQ6xvwG9keqR91IBMhAQACxAAAIfzgAAAQp3Jz5rQOAABCDwAA4h4AAAAgAAAuIQAAzSEAACkiAAACAAAAW8AAhcIAAB6O")
\ No newline at end of file
diff --git a/api/search.index/2b2f13be6e.js b/api/search.index/2b2f13be6e.js
new file mode 100644
index 000000000..3ac6ea467
--- /dev/null
+++ b/api/search.index/2b2f13be6e.js
@@ -0,0 +1 @@
+rn_("RQHFAAAVIyJjqCGpIbAhsSE1hMUAABcVIeUb8BzxHGUCwAAAFK8h5OocY3SxDiwPwR3KHf8eAB/hxQAA5BwlAcUAACZsInEiYuoh7yGlAcEAABR/IWaGIqUBwgAAFKYhZowi+4kxxQAA1R5IIEkg8wPCAAnz1R0AALgBCAIVAcIAABSWIGPhHyOBAsEAABzyZWwjAAPOAAAilscAACBKZWZy87AOAABYEwIA5wcAww5IxAAAHOPh+wsAACoOAAAHG4bJAAAgEg==")
\ No newline at end of file
diff --git a/api/search.index/2b4624d926.js b/api/search.index/2b4624d926.js
new file mode 100644
index 000000000..8df17eb93
--- /dev/null
+++ b/api/search.index/2b4624d926.js
@@ -0,0 +1 @@
+rn_("BYnAAAATzCERZhAhwgAAvxyzHxWBwAAAGGog7BQbAsEAAB+PbXL7AnJ1IcQAAHQfrh8lAcQAABbEImRdIqMi8wIBYgE1IgAAGwLDAAAfpml0wcMAANIfJQHFAAAWnCJkUSKWItMBwAhMywAAIej6lBMAAAEAGgMBAEQFEwEWAPgCYwCYAKUBwQAAEPYfc3YfEwICwgAAHcRpbuSvEwAA9BwAAMceAAA6IAAAkSAAAAADMPsDZWx4AUXi3B4AAJYhAADdIQAAEJDvAQXEAAATtzhhaW9y")
\ No newline at end of file
diff --git a/api/search.index/2b9b9d9c27.js b/api/search.index/2b9b9d9c27.js
deleted file mode 100644
index d7b93bd11..000000000
--- a/api/search.index/2b9b9d9c27.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQCQxAAAG+fl/AsAAD4OAADXGwAAMSAAAEogAAAtIQAACRAAIcIAAGsQQx2hxgAA+BxBwwAAwh0aIBchkiEFAsEAABVKIBY6IWZuNQHAAAAUCSJw9B8+IR4iBYnAAAAXQCIRbiGhxAAA6SEFicQAABKLIhGFIiOFAuAAACIIZGYFAsQAABZ6IhNeIm90GwLNAAAinmhvZzYBwA/rxAAAH2/CAAAhl9cAACLFwwAAIe/njBAAACYdAAB0HwAAfR8AACohAACBIQAAqiEAAEkiAAAgEAAABQLAAAAUriITzCFmchUBzgAAFqsiY2ci8wMBY4L2HAAAocEAAGUbY4EDwwAAHXthaW53DwD9ErEHxwAAHTnCAAAafDowAAABAAAAAAArABAAAAC3C7gLuQutE9QU6RR9Gtka3Br4GvkapBvTGwUcBhxRHPAc8hwWHUYdpB7FHsQfyR/gHyogKyA4IDkgOiA7IFYghyCIII8 [...]
\ No newline at end of file
diff --git a/api/search.index/2bccfe8dd7.js b/api/search.index/2bccfe8dd7.js
new file mode 100644
index 000000000..30b1467b9
--- /dev/null
+++ b/api/search.index/2bccfe8dd7.js
@@ -0,0 +1 @@
+rn_("IcQAAF8dcyAFAsIAABSrHsMyIWZzJQHRAAAWxCJkXSKjIhuJ4AAAE38BRvitHwAAawEEAEgABQCJAHoABQAjAP0XgADCAAAhFcQAACIjwwAAHtLIAAAe9TowAAABAAAAAAAvABAAAACTDpQOlQ6WDpcOmA6ZDpoOmw6cDp0Ong7aEKcW/hr/Gm8bcBvoG/sbnBymHPYc9xwrHTodQR2OHaMdpB28HdEeAh8DHxAfER+6Hx4gICCGIFAhUSGoIakhsCGxIeoh7yEVAdQAABbFImSqIiUBzwAAFswiZK4iySIhxwAAYyKpIiUBxgAAFsMiZFwioiLziwNlbHAbAsIAABveYnKhwgAAvhsFg8AAABoQISoRIVUiIdIAAGIiqCIbAskAACFibHIVAcsAABbKImSzIluNwQAAHTghxQAALB1yICHHAAAPIVQiCZTIAAAiAdAAACJ384ICZmz7gwWRwAAAEw8dFaUf9y8A/Sr [...]
\ No newline at end of file
diff --git a/api/search.index/2beca1254e.js b/api/search.index/2beca1254e.js
new file mode 100644
index 000000000..7ccaf0458
--- /dev/null
+++ b/api/search.index/2beca1254e.js
@@ -0,0 +1 @@
+rn_("IcIAAKMaqx5BwwAAmCCZIJwhwiHzAAFs6h4OAABwEAAAehAAAJITAACdEwAAzRoAALkcAADVHAAAaB0AAH4gAAAjIgAAkAAAFgAAVQHCAAAQLyFzSB2mHokgiiB3IfsDZWdsBQLAAAATISAadyJpbjv9AUkAwwAAIZLUAAAiZA==")
\ No newline at end of file
diff --git a/api/search.index/2c8450799b.js b/api/search.index/2c8450799b.js
new file mode 100644
index 000000000..de322740f
--- /dev/null
+++ b/api/search.index/2c8450799b.js
@@ -0,0 +1 @@
+rn_("McMAAO0UfCGjIXX9wiAQGQAAphIfG3whHKIhFOIcHKMhqw6sDq0Org79Dv4O/w6hxAAAEyAjAMAIQsMAAB0Y4AAAEOHmVg8AAI8cAACKHgAA8h8AAAkiAAALIgAAESIAACMCAAC7wATKwgAAG+LAAAAdJw==")
\ No newline at end of file
diff --git a/api/search.index/2d09a11260.js b/api/search.index/2d09a11260.js
new file mode 100644
index 000000000..cb1cc0eb6
--- /dev/null
+++ b/api/search.index/2d09a11260.js
@@ -0,0 +1 @@
+rn_("QcQAANwd3R0pIHkgFQHRAAAWyiJksyIFicQAADjuITYiNyIUeCIbg8UAACASYcIAAJQdlR2lIbohuyFoIgUCwAAAYhEdEh0THewepB9YIhP1H2twZZDBAACpQyCpDqoOhBxOHU8dVyFVA8EAALVqHbp5IUMOHA8cvx18IG9zdPgO+Q76DvsOdR9bxABEwQAAIhYFkcQAABENHBLdHL8B/ZFAQOAAAAnYJQHIAAAWxSJkSiKqIiOBAsYAAB6CZW0hwwAAzx+NIQWMwAAAEsohGYkiEwcCwgAAIhhmaeRJIQAAnSEAAP0hAAAMIgAASCIAAAEBAPsCYXIxxQAAViJ0InUiNYTAAAATSCEgISEhtCExwgAA4h7jHs0hQcEAAPIf8x/0HxEiBQLAAAAlHSFHIhJHIXV58wH9AgED6KgcAACPHQAAlh8AADIgAAAmIQAApCEAACoiAAA5IgAAbSIAAAQAAAAA+wJlbBUBwgA [...]
\ No newline at end of file
diff --git a/api/search.index/2d37caf80a.js b/api/search.index/2d37caf80a.js
new file mode 100644
index 000000000..11cad1b1c
--- /dev/null
+++ b/api/search.index/2d37caf80a.js
@@ -0,0 +1 @@
+rn_("BZjAAADjHBzHOiAhzAAAYiKoIvMAAm9yAdIJAAAhxgAA1SGJIhUBwgAAFsgiZK8i8wABbQF7EwAABYrAAAChWR0YZCIBQeXAGgAAwhwAAL4eAADIHgAARiAAALchAAARAAAVAcoAABa8ImSPIscGAf2DCQPEAAAiKcIAAB0lwQAAHVg6MAAAAQAAAAAAIAAQAAAA9xr5GoAcgRybHK8cMR0yHX4dfx2AHYEdgh2DHYQdhx7DHwkgZCBqIAghKCEpISohKyFzIXQhiiG8Ib0hviHHIXIiFQHCAAASsiJtmyIjhwLHAAAiuGFrIwsCyQAAIqVhYwG2IQAAO/0IQITBAAAfkscAACITFf3AEQEQAAAToRqksRYXpxwaZCDGC2cFAP0ScQTFAAAfycEAABtywAAAHAXjOQ8AAMUUAABzGwAAcSAAABEA")
\ No newline at end of file
diff --git a/api/search.index/2d532942c4.js b/api/search.index/2d532942c4.js
deleted file mode 100644
index ecad12892..000000000
--- a/api/search.index/2d532942c4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcMAAAwcDRy9HXogscoAAHchFQLBAAAfpCKi3B5jcpscscUAAGgdMcIAAPYUux+8H/MA/QBBB+H2DgAAcx8AADA=")
\ No newline at end of file
diff --git a/api/search.index/2d5a85d722.js b/api/search.index/2d5a85d722.js
deleted file mode 100644
index d70dc22d6..000000000
--- a/api/search.index/2d5a85d722.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAXzSEivBavHW95ocYAAKwdAUThOCAAAI8gAAAzcwHDCIjDAAAcXckAACIb5B0MAACNDgAAuRMAANIUAACBHAAAIgAA")
\ No newline at end of file
diff --git a/api/search.index/2d78d4f11e.js b/api/search.index/2d78d4f11e.js
deleted file mode 100644
index 2932aeb9e..000000000
--- a/api/search.index/2d78d4f11e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcEAAG8QmxAxwQAA9hS7H7wfxQLDAAAnPiEeIhBxG2ZzgRohwAAAvhMrHWUDwAAAFg8gEwsfExQhYmlqzRoDGyAgISADIQchpYLDAAAhACIgIi0iYwEDwQAAIFhpbHP5nxYAAAEAtgI8AzAC8wAEAAUApQDfA/0tQATCAAAcBA==")
\ No newline at end of file
diff --git a/api/search.index/2da4e86f6f.js b/api/search.index/2da4e86f6f.js
new file mode 100644
index 000000000..a3a5caec3
--- /dev/null
+++ b/api/search.index/2da4e86f6f.js
@@ -0,0 +1 @@
+rn_("McUAAIYgUCFRISUBwgAAFswiZK4iySIVAcgAAKROIm0yIvOBAnJ0JQHGAACk6yFtrCFLIrMAwghIzAAAIig7MAAAAQAAoAADAMUOAADkEJ4AfB8AAA==")
\ No newline at end of file
diff --git a/api/search.index/2db3284521.js b/api/search.index/2db3284521.js
deleted file mode 100644
index 0133b1bb6..000000000
--- a/api/search.index/2db3284521.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQHEAACmtCJk9CH1IYEigiIbhcwAACGHFQHBAAAWuyJkkiITggLDAAAiX21vK4XCAAAb7hUBxQAAFhkhZp4cFQHCAAAWuiJkjSL7Aml0ocIAANweodYAAI4iMcYAAKgfSSDZIQUCwAAAEjchEfchdHrzAIQBUSEAADHBAADYH9kfIyLzAgJpc+R4HQAAyh4AAC8gAAB/IAAAhSEAACEBACUBzAAAFrwiZC8ilSIVAcIAABKwIm2ZIiOHAscAACK2YWvnAQL9DRQAyQAAIqPhYRkAALQhAAAQJQHCAAAXpSFt5RvzHEMB/QJFAMIAAB6LxwAAIBPIAAAgdoNeIAAAcwD9EFEA4AAADibh/g4AACwPAAABKwLBAAATeG90AYPAAgrMAAAiWMYAACGGzwAAInTzAgF3g1wPAAAlAcQAABbDImRIIqgiCQLQAAAiBc0AACGUZW0BAwHCAAAdHmo7MAAAAQAA9QACAMUOAAC [...]
\ No newline at end of file
diff --git a/api/search.index/2dece94a57.js b/api/search.index/2dece94a57.js
deleted file mode 100644
index 066428773..000000000
--- a/api/search.index/2dece94a57.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHGAAAWkSJkQCA8IkWEwAAAowkcCx0MHXsffB8VAcMAABAIHHPPIaHBAACDHfMAA2luc/V/EwAARgMcBrMA4gQlAcQAABbDImRIIqgiIwMCxwAAIfJjbOTBDgAAWA8AAOcbAACOHwAAgyIAAAIAAAUDwgAAEiggGSQiGkMiYWVzK4zAAAAclisCxQAAHoBlcgECAcMAACKQZueqHgAA/yAAADQhAAA7IQAAPyEAAEMhAAAmIgAAxCIAAGAAAAGhxwAAtx53BwD9EzEFxgAAHtnQAAAiVeLBCQAAuwoAAIEeAAAAMA==")
\ No newline at end of file
diff --git a/api/search.index/2df33f1ebc.js b/api/search.index/2df33f1ebc.js
new file mode 100644
index 000000000..564f12688
--- /dev/null
+++ b/api/search.index/2df33f1ebc.js
@@ -0,0 +1 @@
+rn_("McsAALwdAh8DH0WEwAAAowscDR0OHX0ffh8VAcMAABAKHHPRIaHBAACFHfMBA2luc/WBEwAARgMcBrMA4gQhwAAAWiJ2IgWJwAAApeUfEqcfFQHEAAATGSFu1RsFAsAAABXkHyapH+AfbG4FAsAAABN4ImN+HH8ciR+KH/Af8R9sdQUDwwAAGE0iEmYhGD0iY3V3IwQCxQAAIBlicAHUGgAAMccAAO4hNiI3IvsCbHT7ifMA/TSAAuXiCQAA2gsAAF8cAADWHQAA+R4AAD4hAAAABVB7/RAQBsIAABzi")
\ No newline at end of file
diff --git a/api/search.index/2e2af8cd75.js b/api/search.index/2e2af8cd75.js
new file mode 100644
index 000000000..bb1e90c00
--- /dev/null
+++ b/api/search.index/2e2af8cd75.js
@@ -0,0 +1 @@
+rn_("YcMAAJwWnRaeFp8W/Br9GgUCwAAAEawiG7sfZG4VAcoAAKROIm0yIiUBxgAApOshbawhSyI7wAhIzAAAIigbAuAAABrqZHLzAJbziwkAAEMROwE=")
\ No newline at end of file
diff --git a/api/search.index/2f1dad419a.js b/api/search.index/2f1dad419a.js
deleted file mode 100644
index 93299eb71..000000000
--- a/api/search.index/2f1dad419a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("pQLBAAAVxB6gwRplc5QWBYzAAAAUoSEcdCIbAsQAAB2yY2T7iqUBwgAAFvEhdhoiGwLhAAAiaG5zI4ECwQAAIdphdPsCYXI=")
\ No newline at end of file
diff --git a/api/search.index/2f294c01c3.js b/api/search.index/2f294c01c3.js
deleted file mode 100644
index cd3739915..000000000
--- a/api/search.index/2f294c01c3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUDq0QsAAG0QAACPEwAA+RQAAMMaAAAPHQAALB0AAKEeAADqHgAAoh8AAFYiAAAQAAIBAAA1AcEAABalImSDIYQhZSL7AmVu")
\ No newline at end of file
diff --git a/api/search.index/2f34579b44.js b/api/search.index/2f34579b44.js
new file mode 100644
index 000000000..40c173cea
--- /dev/null
+++ b/api/search.index/2f34579b44.js
@@ -0,0 +1 @@
+rn_("FQHRAAAWvCJkjyIVAdgAABbLImS7IhUB0AAAFsIiZKEiFQHIAAAWtSJkeiIVAccAABaxImRwIvODAnJzFQHMAAAWtCJkeSIVAcQAABa5ImSKIhOJAsMAACKLY2wVAcgAABawImRvIhUBygAAFsEiZJoiFQHKAAAWwCJkmSL7hRUBxgAAFp4iZFMi84EDZW1u+wJkb/OGwAYoFQHIAAAWQCJkfyAVAcwAABa+ImSXIhOJAsMAACIlZGsVAckAABacImRRIhOEwAhMyQAAIl7LAAAibccAACI/GwLTAAAilmZsFQHaAAAWyiJksyL7g2dNAP4AH6QdbZOk4HrLAAAhx03sJFxGywAAIcnCAAAcpTyCkzICAXUgAAAFAsEAABR9IhWIInFzIwIDxAAAIZ/CAAAeqGFydjswAAABAAAmABEAtBYAAKUaDQCyHAMApR0BAM8dAACPHgAAxh4AAOUeAwD1HgAAkx8BAPcfAQA [...]
\ No newline at end of file
diff --git a/api/search.index/2f5efb6995.js b/api/search.index/2f5efb6995.js
deleted file mode 100644
index 1f605e6d8..000000000
--- a/api/search.index/2f5efb6995.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHFAAAWGiFipByMHSUB0AAAFsAiZFcinyIlAcgAABazImTRIXgiJQHHAAAWryJkrCFuIvODAnJzJQHMAAAWsiJk0CF3IiUBxAAAFrciZBUiiCITiQLDAAAiiWNsFQHIAAAWriJkbSIVAcoAABa/ImSYIhUBygAAFr4iZJci+4UVAcYAABacImRRIvOBA2VtbvsCZG83BwD9HJARwwAAG/bGAAAdxQG5DgAAAQABwgAAHcFi+bsOAACSAIkLNwUBABYA+QB0AOoA8wABdNJYIgAAHAWJwAAApeMfEqUfAQcBwwAAIpBm56oeAAD/IAAANCEAADshAAA/IQAAQyEAACYiAADEIgAAYAAAARsCxQAAIFhjdBUBxAAAExchbtMbBQLAAAAV4h8mpx/eH2xuBQLAAAATdiJjfBx9HIcfiB/uH+8fbHUFA8MAABhLIhJkIRg7ImN1dyMEAsUAACAXYnAB0hoAADHHAADsITQ [...]
\ No newline at end of file
diff --git a/api/search.index/2faaa7842b.js b/api/search.index/2faaa7842b.js
new file mode 100644
index 000000000..92c1e48c3
--- /dev/null
+++ b/api/search.index/2faaa7842b.js
@@ -0,0 +1 @@
+rn_("BYnEAAA47iE2IjciFHgiG4PFAAAgEgUDwAAAExYiFPUfYpQdlR2lIbohuyFoImVveSUBygAAFsUiZEoiqiIhwwAAzx+NIQWMwAAAEsohGYkiEwcCwgAAIhhmaeRJIQAAnSEAAP0hAAAMIgAASCIAAAEBAPsCYXIxxQAAViJ0InUiNYTAAAATSCEgISEhtCExwgAA4h7jHs0hQcEAAPIf8x/0HxEiBQLAAAAlHSFHIhJHIXV58wH9AgED6KgcAACPHQAAlh8AADIgAAAmIQAApCEAACoiAAA5IgAAbSIAAAQAAAAA+wJlbPMAA3B0dfaiGgAABwQBAM4AlQB7AAWDwAAANaofSyDbIRX/IQUCwAAAEjkhEfkhdHrzAIQBUyEAADHBAADaH9sfJSLzAgJpc+X5GwAAeh0AAMweAAAxIAAAgSAAAIchAAACEBDFAcEAABUgIHdAHCUBwAAApE4ibeMfMiL7AmRuUcgAALA [...]
\ No newline at end of file
diff --git a/api/search.index/30911a1c00.js b/api/search.index/30911a1c00.js
new file mode 100644
index 000000000..e51acd102
--- /dev/null
+++ b/api/search.index/30911a1c00.js
@@ -0,0 +1 @@
+rn_("AUE6MAAAAQAAAAAAEAAQAAAAchB4EMgQ7RvyG9seqx+sH7Afth9eIF8gdyAVIegh6SFlIkHCAACcE+UU1iHXIbHHAADdH6UBwgAAF4IhbSIcoccAAFYgocMAAO4b8wDAjAEBnBAAAPuO")
\ No newline at end of file
diff --git a/api/search.index/30a7b63b08.js b/api/search.index/30a7b63b08.js
deleted file mode 100644
index daef74b56..000000000
--- a/api/search.index/30a7b63b08.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQHDAAAWwyJkvSFIInwifSKkIqgiRQHDAAAWvCJkjBqMHi8ilSIjAALEAAAhIGFu9PwbAACtAWcENAA7jskAAB3H")
\ No newline at end of file
diff --git a/api/search.index/310fcb1e8f.js b/api/search.index/310fcb1e8f.js
new file mode 100644
index 000000000..0d1055d42
--- /dev/null
+++ b/api/search.index/310fcb1e8f.js
@@ -0,0 +1 @@
+rn_("JQHCAAAQxRNzaBDEE1UBwQAAE70WY4gOiQ6KDkAdph8hwAAA0Au+HaHDAAC1HiHDAAC0HhgiBYzAAAAiVR3KISnVIYki4wD9IYEAxAAAIaDqvRoAALYcAACnHQAA6R4AAPkfAAAEIAAASSEAAJ0hAAD9IQAADCIAAEgiAAABEREBAQAjgwLCAAAdrGZzJQHBAAAwqR6qHoggcy8gdiEVAcAAABTuGnSYG/sDY29zFYTDAAATaiGyH/MDAXTSoRwAAOv7/QEBSg==")
\ No newline at end of file
diff --git a/api/search.index/313af57917.js b/api/search.index/313af57917.js
deleted file mode 100644
index c6cfdb008..000000000
--- a/api/search.index/313af57917.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcYAAD4inCLBIsgi8wABZOqAGgAA/hoAAH0gAAAcIgAAOSIAAFEiAABaIgAAdSIAAH4iAACgIgAAsSIAAAABEAAQABsCzgAAIhBkdg==")
\ No newline at end of file
diff --git a/api/search.index/3178b11181.js b/api/search.index/3178b11181.js
new file mode 100644
index 000000000..ec0fb7bf6
--- /dev/null
+++ b/api/search.index/3178b11181.js
@@ -0,0 +1 @@
+rn_("BQLBAAAVTCAWPCFmbjUBwAAAFAsicPYfQCEgIgWJwAAAF0IiEXAhocQAAOshBYnEAAASjSIRhyIjhQLgAAAiCmRmBQLEAAAWfCITYCJvdBsCzQAAIqBob8dsAP0vmAfGAAAd3sQAAB9xwgAAIZnXAAAix8MAACHx544QAAAoHQAAdh8AAH8fAAAsIQAAgyEAAKwhAABLIgAAIBAAAA==")
\ No newline at end of file
diff --git a/api/search.index/31da8f63d7.js b/api/search.index/31da8f63d7.js
new file mode 100644
index 000000000..e7a46d5e1
--- /dev/null
+++ b/api/search.index/31da8f63d7.js
@@ -0,0 +1 @@
+rn_("BQLBAAAYbiATPiBhdEHAAADWC7oTxRO3HhUB0QAAFrwiZI8iFQHYAAAWyyJkuyIVAdAAABbCImShIhUByAAAFrUiZHoiFQHHAAAWsSJkcCLzgwJycxUBzAAAFrQiZHkiFQHEAAAWuSJkiiITiQLDAAAii2NsFQHIAAAWsCJkbyIVAcoAABbBImSaIhUBygAAFsAiZJki+4UVAcYAABaeImRTIvOBA2VtbvsCZG/zhsAGKBUByAAAFkAiZH8gFQHMAAAWviJklyITiQLDAAAiJWRrFQHJAAAWnCJkUSIThMAITMkAACJeywAAIm3HAAAiPxsC0wAAIpZmbBUB2gAAFsoiZLMi+4NnTQD+AB+kHW2TpOB6ywAAIcdN7CRcRssAACHJwgAAHKU8gpMyAgF1IAAABQLBAAAUfSIViCJxcyMCA8QAACGfwgAAHqhhcnY7MAAAAQAAJgARALQWAAClGg0AshwDAKUdAQDPHQA [...]
\ No newline at end of file
diff --git a/api/search.index/31e34e5b6a.js b/api/search.index/31e34e5b6a.js
deleted file mode 100644
index 75cbbe35c..000000000
--- a/api/search.index/31e34e5b6a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLDAAAajCIdqSJldCMGAsUAACGZYnAByx0AAPMFAWMB+SEAAAXAwYCCAAASsxYStBYT4RoFAsAAABwhIRnqHmNz+wJlcwUCxQAAGZohGskhY2VLh8EAABzSxAAAHv4FAsAAABR4EB4gIm9yBQPIAAASKCAZJCIaQyJhZXNLwAJByAAAHunLAAAgJzHAAACzA6IECgX3GAD+QgegA8YAABrgzQAAISDEAAATpOMZAAAAIgAAAJQBAACaAQAAMBA=")
\ No newline at end of file
diff --git a/api/search.index/323cffaf30.js b/api/search.index/323cffaf30.js
deleted file mode 100644
index d9f7b15fb..000000000
--- a/api/search.index/323cffaf30.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQHDAACmviJkPiA/IJcimCKhwwAAxw4FAsAAABI3IRH3IXR68wCEAVEhAAAxwQAA2B/ZHyMi8wECaXPl9xsAAHgdAADKHgAALyAAAH8gAACFIQAAAhAQ+wNlbnM=")
\ No newline at end of file
diff --git a/api/search.index/3242a84a40.js b/api/search.index/3242a84a40.js
deleted file mode 100644
index 778678b92..000000000
--- a/api/search.index/3242a84a40.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ZQHAAACmtCJkaSH0IfUhXyKBIoIiJQHMAAAWtSJk9SGCIhWExAAAEYEhViDzBgFm8yIcAACjARkBJQHLAAAWtCJk9CGBIqHUAACOIlvEAAzIAAAhkvv9EQEC")
\ No newline at end of file
diff --git a/api/search.index/324ebb675b.js b/api/search.index/324ebb675b.js
deleted file mode 100644
index e72787860..000000000
--- a/api/search.index/324ebb675b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("pQHFAACmayFmRB2lAcAAAKRBIHPGGicBAP0SAwTFAAAgD8IAAB8LwgAAIRTmpxAAAM8QAADNGgAAAxsAACAgAAADIQAAByEAAAIAEAA=")
\ No newline at end of file
diff --git a/api/search.index/32722777f2.js b/api/search.index/32722777f2.js
deleted file mode 100644
index 17c17093e..000000000
--- a/api/search.index/32722777f2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHKAAAW8SF2GiIFhsAAACWtHHAiJa4cDCAVgcUAAByqIp8hI4ECyQAAIbNhczWEwAAAo1UcqRyqHKAdUcIAAKUTphOzGkMgNiIlwcCACAAA4l4dU9saOxw8HDUhXCLk9x5HHTohBYXAAAAbcCEYDiGhxAAAECETAQLgAAAasm1z5HkQAAD7FAAAtB0AAKYfAADUHwAABRAQBQLAAAAVrByiUxx1eQUCwAAAFCwgG6oiY3X3PwD+wECoO+AAABBfOzAAAAEAACoAEAAVDAIAbw4SAIATAwDGFgEAgBwAAB8dAQBsHQEA6x4BAC4gAABnIAAA9iAAAJ8hAACtIQAAsyEAAMQhAAA4IgAA")
\ No newline at end of file
diff --git a/api/search.index/32a8a067eb.js b/api/search.index/32a8a067eb.js
new file mode 100644
index 000000000..1746268f4
--- /dev/null
+++ b/api/search.index/32a8a067eb.js
@@ -0,0 +1 @@
+rn_("BQLBAAASzRocjSFmbgUCxAAAES0dFQogaXP7AmxvBQLFAAASyR4Toh9rbhsCygAAIHNjdTMA/QUABsYAAB0uxgAAHS/hugkAAPIJAAAgIcAAAK0WrRxrA9YAACLHYWVz")
\ No newline at end of file
diff --git a/api/search.index/33252c3817.js b/api/search.index/33252c3817.js
new file mode 100644
index 000000000..b1114c3dd
--- /dev/null
+++ b/api/search.index/33252c3817.js
@@ -0,0 +1 @@
+rn_("BQPDAAAhgBPGFiL4GskeIwIcoh9pa241AcEAABgsIWKAEMgdCyBVAsIAAHHEHMUcxhzHHOseox+1HyXEH2whaXP8H/0f/h8jIWMh8wICa28BIiEAAPuK")
\ No newline at end of file
diff --git a/api/search.index/332f7f92dd.js b/api/search.index/332f7f92dd.js
deleted file mode 100644
index 4181ee3cb..000000000
--- a/api/search.index/332f7f92dd.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQHCAACmtCJk9CH1IYEigiIhyQAAih8rIgWRwQAAEQscEtscy8EBwcQAABrYwgAAG7vDAAAazqHEAAAQIRMAAuAAABqybXPkeRAAAPsUAAC0HQAAph8AANQfAAAFEBDbwQSFwQAAIB/IAAAcoA==")
\ No newline at end of file
diff --git a/api/search.index/33857042e3.js b/api/search.index/33857042e3.js
new file mode 100644
index 000000000..9841601cd
--- /dev/null
+++ b/api/search.index/33857042e3.js
@@ -0,0 +1 @@
+rn_("QcYAAEAiniLDIsoi8wABZOqCGgAAABsAAH8gAAAeIgAAOyIAAFMiAABcIgAAdyIAAIAiAACiIgAAsyIAAAABEAAQABsCzgAAIhJkdg==")
\ No newline at end of file
diff --git a/api/search.index/33bcd15aa9.js b/api/search.index/33bcd15aa9.js
new file mode 100644
index 000000000..e4dbccd72
--- /dev/null
+++ b/api/search.index/33bcd15aa9.js
@@ -0,0 +1 @@
+rn_("RQHEAACmtiJk9iH3IYMihCIbhcwAACGJFQHBAAAWvSJklCITggLDAAAiYW1vK4XCAAAb8BUBxQAAFhshZqAcFQHCAAAWvCJkjyL7Aml0ocIAAN4eodYAAJAiMcYAAKofSyDbIQUCwAAAEjkhEfkhdHrzAIQBUyEAADHBAADaH9sfJSLzAgJpc+R6HQAAzB4AADEgAACBIAAAhyEAACEBACUBzAAAFr4iZDEilyIVAcIAABKyIm2bIiOHAscAACK4YWvnAQL9DRQAyQAAIqXhYxkAALYhAAAQJQHCAAAXpyFt5xv1HEMB/QJFAMIAAB6NxwAAIBXIAAAgeINgIAAAcwD9EFEA4AAADijhAA8AAC4PAAABKwLBAAATem90AYPAAgrMAAAiWsYAACGIzwAAInbzAgF3g14PAAAlAcQAABbFImRKIqoiCQLQAAAiB80AACGWZW0BAwHCAAAdIGo7MAAAAQAA9QACAMcOAAC [...]
\ No newline at end of file
diff --git a/api/search.index/33df51526b.js b/api/search.index/33df51526b.js
deleted file mode 100644
index 681d68111..000000000
--- a/api/search.index/33df51526b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLEAAAhIyG3IRXzIWVyEwUCwQAAHu9icuToGwAAuxwAAPocAACuHQAAoiIAABEAAKHGAABAISMBAsMAABzyZnDkNhwAAJ0eAADiHwAAMiAAAIkgAAAABVD7Am50")
\ No newline at end of file
diff --git a/api/search.index/3405e4a6a5.js b/api/search.index/3405e4a6a5.js
deleted file mode 100644
index a7fa17e60..000000000
--- a/api/search.index/3405e4a6a5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAXcR8T0h5lcBUBxQAAF+Uhc4YhKwLCAAAeoG10McYAAMMeACEBIaHKAABTIQGEA8MAACEM0wAAIqTHAAAh/mNlbEHDAADJGsQdBCAFIPuF+8AAxPMAA2FlcwG2IgAA")
\ No newline at end of file
diff --git a/api/search.index/350e1f6c83.js b/api/search.index/350e1f6c83.js
new file mode 100644
index 000000000..1c976697f
--- /dev/null
+++ b/api/search.index/350e1f6c83.js
@@ -0,0 +1 @@
+rn_("AQKBwgAAG/KIyBQAACHCAAAIII4iQwCTwgAAE6DAAAAPTOprEAAAhxAAANYaAADiGgAA9xsAANYeAAByHwAAqR8AAOAfAAAFIgAAFCIAAAUAARABEKHCAACIGqvAIIzEAAAWrcUAAB0da8AEhOAAAAUq")
\ No newline at end of file
diff --git a/api/search.index/35172f9a3c.js b/api/search.index/35172f9a3c.js
new file mode 100644
index 000000000..36b8e3100
--- /dev/null
+++ b/api/search.index/35172f9a3c.js
@@ -0,0 +1 @@
+rn_("AQUBwwAAIpJm56weAAABIQAANiEAAD0hAABBIQAARSEAACgiAADGIgAAYAAAAbHIAABKIfMAAmRu9aUTAABQAQEAPwiHAg==")
\ No newline at end of file
diff --git a/api/search.index/353cefed76.js b/api/search.index/353cefed76.js
new file mode 100644
index 000000000..a20dbd984
--- /dev/null
+++ b/api/search.index/353cefed76.js
@@ -0,0 +1 @@
+rn_("UcIAAAAcuxy8HFUg+SABAwHFAAAgEHKJEBwAABsCzgAAIhBhchWQwwAAFPohwh3zBIjy1RoAAFABAQgBxQAAIZNyiQQfAAChyAAA0B/nAQDAhKTJAAAgdQFeHAAA+4Y=")
\ No newline at end of file
diff --git a/api/search.index/3586f113d6.js b/api/search.index/3586f113d6.js
new file mode 100644
index 000000000..28eaba47b
--- /dev/null
+++ b/api/search.index/3586f113d6.js
@@ -0,0 +1 @@
+rn_("ccIAAHIQ7RvyG9seqx93IBUhAQACxAAAIf7gAAAQqXJz5rYOAABEDwAA5B4AAAIgAAAwIQAAzyEAACsiAAACAAAAW8AAhcIAAB6Q")
\ No newline at end of file
diff --git a/api/search.index/35faaf1e77.js b/api/search.index/35faaf1e77.js
new file mode 100644
index 000000000..9ec09942f
--- /dev/null
+++ b/api/search.index/35faaf1e77.js
@@ -0,0 +1 @@
+rn_("McEAAO4hNiI3IhUBwAAAHi0icL8T84OKCQLQAAAiLOYAABuraXAF/cMCABoAABhGIhxyIhIkIRgnIiMFAsUAAB+/YnABuxYAANv9ARgIyQAAIH4=")
\ No newline at end of file
diff --git a/api/search.index/36a3a88217.js b/api/search.index/36a3a88217.js
new file mode 100644
index 000000000..7d97fb9aa
--- /dev/null
+++ b/api/search.index/36a3a88217.js
@@ -0,0 +1 @@
+rn_("pQHNAAAUkiJmxiIjhsAAwsAAAB6TxwAAIa0hwwAA+xQuHaUCxAAApC0ho1UhYnNcHaHHAACFHRUBygAApE4ibTIiJQHGAACk6yFtrCFLIvOGAmZwFYHEAAAV2B5mG2vABEjCAAAWrncJAP01wArCAAAQZskAAB/jzAAAIUHyGQUAAKQW")
\ No newline at end of file
diff --git a/api/search.index/36a6070d82.js b/api/search.index/36a6070d82.js
deleted file mode 100644
index 2593b3e2c..000000000
--- a/api/search.index/36a6070d82.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ockAADkiFQHDAAAWySJkuSLzAogBtBoAAFMAj8MAABxXwAAAIfLSgg4AAKkxxgAAuRy6HPcgBQLAAACsfCJGliCXIJohwCFjZqHDAADtGvsCbW7r/QFABcIAABzx")
\ No newline at end of file
diff --git a/api/search.index/3748602705.js b/api/search.index/3748602705.js
deleted file mode 100644
index b14f8ec72..000000000
--- a/api/search.index/3748602705.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("RQHCAACgFx1zXA5oHWkdah01AsAAABX4GxX5G3J3DgxgDmEOGwLgAAAOkG54BQLAAAAa+iAyYhBjEA0iY3L7A2Vpcw==")
\ No newline at end of file
diff --git a/api/search.index/378bff2293.js b/api/search.index/378bff2293.js
new file mode 100644
index 000000000..b82c84d72
--- /dev/null
+++ b/api/search.index/378bff2293.js
@@ -0,0 +1 @@
+rn_("AUDhmRoAAJQeAAAIBQLBAAAUkyEltB9nIXFzBQLLAAAUfSIViCJxc6HEAABDHQFFiYAfAABnBwL9EaEDywAAIZfGAAAfs+eZEwAA2hQAAP4cAABxHQAABB8AAJcfAADMHwAA2B8AABOIiAEbg8IAACIJ")
\ No newline at end of file
diff --git a/api/search.index/37a0e8a260.js b/api/search.index/37a0e8a260.js
deleted file mode 100644
index 91789b203..000000000
--- a/api/search.index/37a0e8a260.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHFAAAY8iFjjh+DIjUBxAAAFqUiZIMhhCFlIiuJwgAAHVJjAAPEAAAhY2F0deSsEwAAaRUAAMkdAABtHwAAjB8AAAIRAKHGAAC7H1WCwAAAFbof6hpQHVEdth+3H/sCZnQbisUAAB7tIcAAAFsc9SChxAAAIiBjAcAIQsMAACH25r4bAACfHwAAxh8AAGEgAACTIAAATiIAAJ0iAADQAAAQNQHEAAAWmyJk/SD+IFAiFxkD/SeJB8IAAB2nwwAAIcfEAAAfjcEAABrpyAAAIdLHAAAik+d6EAAA2hAAAMQaAAACHAAADB8AAAUhAADTIQAAhyIAAAQQAAArAsAAAAwYcHM=")
\ No newline at end of file
diff --git a/api/search.index/37ffc34210.js b/api/search.index/37ffc34210.js
deleted file mode 100644
index a56e144c8..000000000
--- a/api/search.index/37ffc34210.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FYTAAAASHB1ZEKUBxAAApmshZkQdawPFAAAdLWVvcqUBwAAApEEgc8YaBQLBAAASyxociyFmbgUCxAAAESsdFQggaXP7AmxvBQLFAAASxx4ToB9rbhsCygAAIHFjddcIAP0XAwbFAAAgD8IAAB8LwgAAIRTGAAAdLOu4CQAA8AkAANYLAACnEAAAzxAAAM0aAAADGwAA4BwAACAgAABaIAAAAyEAAAchAAAgECAAEAA=")
\ No newline at end of file
diff --git a/api/search.index/3873f76718.js b/api/search.index/3873f76718.js
new file mode 100644
index 000000000..cd039e658
--- /dev/null
+++ b/api/search.index/3873f76718.js
@@ -0,0 +1 @@
+rn_("QcEAAI0QPxyEIfohocYAAEMgscIAABkcpQHFAAAVIyJjqCEVAckAABZsImLqIVOFwghA4AAAHcHzggJkaeOB/YABBscAACIS")
\ No newline at end of file
diff --git a/api/search.index/38a34909fa.js b/api/search.index/38a34909fa.js
deleted file mode 100644
index 14b0686b4..000000000
--- a/api/search.index/38a34909fa.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAnAyISIhMBImVwJQHPAAAWyiJkrCLHIiUBxwAAGGMiZ2EipyIlAcYAABbBImRaIqAi84IDZWxw84ODMcEAABwhsCGxISHBAACiGjodAYECzAAAIjbSAAAidmFwFQHGAAAgeyDCIXIdIPMDAXAB3RoAABuJwwAAHZS3AwD9NEECxgAAH/T0Sw8AADANMAEtAQ==")
\ No newline at end of file
diff --git a/api/search.index/38dd2455dd.js b/api/search.index/38dd2455dd.js
new file mode 100644
index 000000000..6dfe6c1d9
--- /dev/null
+++ b/api/search.index/38dd2455dd.js
@@ -0,0 +1 @@
+rn_("FQHDAAAgfSDEIXIfIAUCwQAAFH0iFYgicXMjBgLEAAAhn2Fy5s8dAADlHgAAkx8AAPcfAAADIAAAgSEAANohAAADEQAA+wJwdiUByAAAMKkeqh6IIHMvIHYh4cIAAOQc+wJmc/uKNQHAAAAUfyFmbyGGIociIcEAAKcfAyL7AnJzFYHIAAAVmiFnIBUB0QAAFssiZLsi8wECZHMBvA4AABOBAsoAACItY2kBAQHDAAAhpmbjvRQAAHAdAADSHwAAjCIAADAxocIAAOUfFQHKAAAWxSJkqiIxyAAADCINIkgiMcMAACAhISG0IfsDcHR1JQHGAAAWzCJkriLJIlMEA8UAACH/ZW1zAUEiAADzgQJpbvsCcnTXAQD9CUgBxQAAIqfhhSEAAGciAAAQ")
\ No newline at end of file
diff --git a/api/search.index/38e6145b0e.js b/api/search.index/38e6145b0e.js
new file mode 100644
index 000000000..b9917d68d
--- /dev/null
+++ b/api/search.index/38e6145b0e.js
@@ -0,0 +1 @@
+rn_("BQLAAAAWLCERkR9maQEFgsMAACF1/JcdAAABAFgBvQBfAAwBBABIAAUAiQB6AAUAJQHDAABAORw6HHscfBxzpRvUG/sDb3V5")
\ No newline at end of file
diff --git a/api/search.index/39032e28d9.js b/api/search.index/39032e28d9.js
new file mode 100644
index 000000000..9e541d20f
--- /dev/null
+++ b/api/search.index/39032e28d9.js
@@ -0,0 +1 @@
+rn_("FQHQAAAWwiJkoSIVAcgAABa1ImR6IhUBxwAAFrEiZHAi84MCcnMVAcwAABa0ImR5IhUBxAAAFrkiZIoiE4kCwwAAIotjbBUByAAAFrAiZG8iFQHKAAAWwSJkmiIVAcoAABbAImSZIvuFFQHGAAAWniJkUyLzgQNlbW77AmRv+8AGKA==")
\ No newline at end of file
diff --git a/api/search.index/391c5b1846.js b/api/search.index/391c5b1846.js
deleted file mode 100644
index 5ad6ccb99..000000000
--- a/api/search.index/391c5b1846.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUE6MAAAAQAAAAAAEAAQAAAAcBB2EMYQ6xvwG9keqR+qH64ftB9cIF0gdSATIeYh5yFjIkUBwgAAFBQidJoT4xTUIdUhsccAANsfpQHCAAAXgCFtIByhxwAAVCChwwAA7BvzAMCMAQGaEAAA+44=")
\ No newline at end of file
diff --git a/api/search.index/39331e292d.js b/api/search.index/39331e292d.js
new file mode 100644
index 000000000..046d5eb18
--- /dev/null
+++ b/api/search.index/39331e292d.js
@@ -0,0 +1 @@
+rn_("FQHGAAAWGyFmoBwJAtAAACIHzQAAIZZlbaUCxgAAFhohGO0hYneeHPMBwIJA4ggMAABVDgAAoh4AACMAK8GAIMAAACBbP3w87t0=")
\ No newline at end of file
diff --git a/api/search.index/397a828ab5.js b/api/search.index/397a828ab5.js
new file mode 100644
index 000000000..cc018be8e
--- /dev/null
+++ b/api/search.index/397a828ab5.js
@@ -0,0 +1 @@
+rn_("FQPAAAAW+yG13x0R+yAzZXGAIUHIAAAkIiciPSJEIkHCAAAXISQhZiFxIQUCwAAAHKsiHYIiYWgHHIL9HwAexgAAIkPHAAAiRscAACJN1AAAIrrJAAAijssAACJyKwLBAAAiBG9yIcUAAJYcqiEFAsAAAByxHyDDHk0iY2QhxwAABiIVIgUCwQAAHJIhE2gdbW4BRvo2HQAAAQB4AhAAWgAOAE0ApgCBAHMAdy4A/daJE8IAACE+wQAAIPrCAAAhP8cAACHt7qcOAADqDgAAqRYAALsWAADUGgAA3BoAAOEaAADrGgAAOxwAAJ4cAABMHQAAWB0AAM0dAACIHgAAKCAAABYAAAABEAEA")
\ No newline at end of file
diff --git a/api/search.index/3a0eeaec31.js b/api/search.index/3a0eeaec31.js
new file mode 100644
index 000000000..775bc6444
--- /dev/null
+++ b/api/search.index/3a0eeaec31.js
@@ -0,0 +1 @@
+rn_("ocYAAL0fBQLIAAAXFSITBCJlcGWCwAAAFbwfVQ/sGlIdUx24H7kfAQCEwQAAE7HlGwwAAIsOAACMEwAA6hwAABcgAACPIQAAAQUQQcIAAD8dnh4dIEQh+wJkbV8D/XEABsIAAB1JwgAAHJU=")
\ No newline at end of file
diff --git a/api/search.index/3a652b4ea4.js b/api/search.index/3a652b4ea4.js
deleted file mode 100644
index cd15299db..000000000
--- a/api/search.index/3a652b4ea4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FYTGAAARxh5iIAUDwAAAHIohE8MaJz0glSBhb3IBTIpWIQAABQLAAADDjRwSix1lbAUCwAAAFsUeE9obcnUFAsUAABZVIRRWImN0ocYAALQdzw7+RAU4As8AACIgzgAAIqLHAAAfnwFFioMcAAChzwAAOSKh1AAAfiLzgQJncwUDwAAAEFUiFrMdFSkdZXR3BQLDAAAcHyIfWSJjZvubpQLBAAAVxB6gwRplc5QWBYzAAAAUoSEcdCIbAsQAAB2yY2T7iqUBwgAAFvEhdhoiE4IC4QAAImhuc/sCYXKhxgAAJx0FAsEAABiHIRgHIHd4FQHFAAAX5SFzhiErAsIAAB6gbXQxxgAAwx4AIQEhocoAAFMhAYUDwwAAIQzTAAAipMcAACH+Y2Vs+8AAxPMAgwG2IgAAAU+K2yEAAAkCzwAAIh7LAAAhUmRuBQLAAAAWnh8S2RtldAUCwgAAESYdoNcbaXP7AmVsGwLgAAA [...]
\ No newline at end of file
diff --git a/api/search.index/3aedafcb85.js b/api/search.index/3aedafcb85.js
deleted file mode 100644
index 7ba2afa0c..000000000
--- a/api/search.index/3aedafcb85.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("oc4AADkiQcMAAPUe9h5IIPQgFYHHAAAcqiKfISMDwQCgwQAAIjbFAAAgDAGzIQAA+wJobzMAA8wAACHNY2V088gWAAC9AyMB")
\ No newline at end of file
diff --git a/api/search.index/3b31c37037.js b/api/search.index/3b31c37037.js
deleted file mode 100644
index e5a860d58..000000000
--- a/api/search.index/3b31c37037.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUPhXhwAAH4fAACIGwLGAAAiJGl0McMAAK8WsBbAHzUBwAAAFqUiZIMhhCFlIgUCwAAAGXUgRKcf3h8DIhIiZXAxwgAAfyCAIIUhFQHCAAASsCJtmSIjhwLHAAAitmFrYwcDyQAAIqNhY2sBtCEAACUBxAAAFsEiZFoioCJzAP0NAATDAAAegAHHHwAAIckAADYhySGXBwDEAi/EAAAf4sEAAB1HAVUiAAA=")
\ No newline at end of file
diff --git a/api/search.index/3b4f3d56ce.js b/api/search.index/3b4f3d56ce.js
deleted file mode 100644
index f5def137e..000000000
--- a/api/search.index/3b4f3d56ce.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcAAAFgidCKhxgAA4x8VAcQAABMXIW7TGwUCwAAAE3YiY3wcfRyHH4gf7h/vH2x1McgAAOwhNCI1IvuJ1wEA/TSAAsUAAB/i5OAJAADYCwAAXRwAANQdAAD3HgAAAAVQGwLCAAAc4GV0")
\ No newline at end of file
diff --git a/api/search.index/3b9b49235e.js b/api/search.index/3b9b49235e.js
new file mode 100644
index 000000000..d6b81e398
--- /dev/null
+++ b/api/search.index/3b9b49235e.js
@@ -0,0 +1 @@
+rn_("BQLAAAATASAQwBxhcwUCwwAApxoiok0hZHNTAcAIBsQAACBt0vQaAADcBQLAAAATuB4Q8xphcwUCwAAAFJUf4GwcaXMFAsMAAKfYIaJrIGRz8wDACIbjsxMAAHIVAACtIQAAlSIAABQA")
\ No newline at end of file
diff --git a/api/search.index/3bab5afe9e.js b/api/search.index/3bab5afe9e.js
new file mode 100644
index 000000000..0ee6cea48
--- /dev/null
+++ b/api/search.index/3bab5afe9e.js
@@ -0,0 +1 @@
+rn_("AUuKWCEAABsDwgAAIY/HAAAhIm9yeQUCwAAAw48cEo0dZWwFAsAAABbHHhPcG3J1FYTGAAARoR8HIbHCAADAHhUCxAAAFlchFFgiY3TMGhsC4AAAFqhzdKHGAAC2HUc/AP5ERzgCzwAAIiLOAAAipMUAACLM0q4iAAAb")
\ No newline at end of file
diff --git a/api/search.index/3bb42312c3.js b/api/search.index/3bb42312c3.js
new file mode 100644
index 000000000..3c35cdde2
--- /dev/null
+++ b/api/search.index/3bb42312c3.js
@@ -0,0 +1 @@
+rn_("UcYAAK0fZCHyIWwicSLzAAFi5qcWAABvGwAAOh0AABAfAAC6HwAA6iEAAO8hAAABAQAA8wMBcvKPEwAAKgorAsEAACBdaXI=")
\ No newline at end of file
diff --git a/api/search.index/3c14729dd9.js b/api/search.index/3c14729dd9.js
new file mode 100644
index 000000000..bc7c7ef1b
--- /dev/null
+++ b/api/search.index/3c14729dd9.js
@@ -0,0 +1 @@
+rn_("AQAB4QAAFMVz6LMOAACSEAAA0BwAAN4cAAAbHQAAIx0AABIfAABrIAAATSEAAAgREREQKwLMAAAgGmhyocQAAAohIccAANcecx9RxgAAbiKdIrYityK9IgFG4tweAACWIQAA3SEAABCQ8wQBZuGPGgAA0B8AAAEFA8MAAB6CIhIXIRgkInR1dyMFAsUAAB+vYnABqRYAAFsDwgAAIjphaGx3CgD9HJwEwwAAIqXHAAAfwsIAAB7U7qcEAABsHAAAiR0AAJMeAAD6IAAA/yAAADshAABrIQAAyCEAANwhAAD2IQAAUiIAAGEiAACDIgAAlCIAABUgAQAAEAEA")
\ No newline at end of file
diff --git a/api/search.index/3c82933202.js b/api/search.index/3c82933202.js
new file mode 100644
index 000000000..e742555bd
--- /dev/null
+++ b/api/search.index/3c82933202.js
@@ -0,0 +1 @@
+rn_("FQHSAAAWxCJkoyIVAdQAABbFImSqIhUBzwAAFswiZMkiFQHGAAAWwyJkoiJTjAPGAAAiqWVscIcDhP0o0ATKAAAiVNMAACKoygAAIlU=")
\ No newline at end of file
diff --git a/api/search.index/3d36ed2922.js b/api/search.index/3d36ed2922.js
new file mode 100644
index 000000000..8a81c1350
--- /dev/null
+++ b/api/search.index/3d36ed2922.js
@@ -0,0 +1 @@
+rn_("YcAAAH4cfxyJH4of8B/xHyHDAAACHKIfIcIAAPgayR4hwQAAgBPGFvMA/QAlAujVFAAARBwAAPceAADHHwAASiAAAJYgAAD2IAAAOiEAAMkhAAAEEAAAAAFDOzAAAAEAAJ8AAgCXHAAA4x2eAKHEAAAtHNv9CgEEU19XVq4=")
\ No newline at end of file
diff --git a/api/search.index/3e75cc8ce6.js b/api/search.index/3e75cc8ce6.js
deleted file mode 100644
index 9ad0003b4..000000000
--- a/api/search.index/3e75cc8ce6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAToB4VhiFtdKHHAAAAIfuDg4PADkrMAAAiWM0AACIzwAAAG6XPAAAidMMAAB2LdQPGAAAxwBzBHLweElYdolcdaWxy9Rp+HH8cLx0wHXEhciGhxQAAwRZRxgAAqx9iIfAhaiJvIhMA/ABYxAAAIiHDAAAe0OzYEAAApRYAAPwaAABtGwAAKR0AADgdAADPHgAADh8AALgfAACmIQAAriEAAOghAADtIQAAABEAAQEQAKHCAAC8GwWRwAAAEw0dFaMf0wDACWTCAAAdNsMAAB289k4PAAA/BHQHAQC1AgQAE4ECxgAAHqlldCUBzAAAEIYgcy0gdCH7hhUB0QAAFroiZI0iFQHYAAAWySJkuSLzhwJyduHFAACYGjUCxwAAJoUgiSES0h1icv8bJB2HIRXBwQAoAACkaCISVSIWYiBbIOHDAADcFPsCbnQFA8IAALheIKfsHxaJH2VtdSsCygAAH8FvciHHAAD [...]
\ No newline at end of file
diff --git a/api/search.index/3ebb893a6b.js b/api/search.index/3ebb893a6b.js
new file mode 100644
index 000000000..2b3ab6864
--- /dev/null
+++ b/api/search.index/3ebb893a6b.js
@@ -0,0 +1 @@
+rn_("pQHDAAAUMSFmeyKhwgAA/BuhxAAAwCHzAAFt48wQAAAUHQAAKR0AAH0hAAADERsCwAAAEHlkbhWCxQAAFHUh8B4bAsEAAB+RdXlnAQH9A0EDxAAAIZrAAAAgaMMAAB+S7ZsTAACwEwAAoBoAALgaAADeGwAA4BsAAF4dAACzHQAApx4AAEcgAABnIAAAgyAAALghAAA/IgAAAAMBAAABANHEAABEHAUCwAAAP1YidCJ1IjceIbIhsyFhchMEAsQAACGPcHMB4BoAAOcBAP0XBQDBAAAa7ckAACCF8rEBAAACFQ==")
\ No newline at end of file
diff --git a/api/search.index/3edf64063f.js b/api/search.index/3edf64063f.js
new file mode 100644
index 000000000..e91c66588
--- /dev/null
+++ b/api/search.index/3edf64063f.js
@@ -0,0 +1 @@
+rn_("FQHFAAAV/iFyAiAlAcMAABawImRpHW8i+4ZBxwAAwR+QIZEhECIBBgLEAAAiKcgAACJkYXLmmxwAAH4dAADDHwAAaiAAACghAAC8IQAAxyEAAAYAMgAhxgAAYiGcIqMAwQaAywAAIi7BAAATkOVpGwAAOR0AAA8fAAAsIgAAUSIAAJYiAAAwAAAVAsAAAOLJHOTWHWt2kxMVAcsAAKhqIncEIfvAAIlzAP0hSADCAAAWpuckBQAAkwkAAIoTAAC1EwAA7BQAAJoVAAA/IAAAlyAAAAMABgA=")
\ No newline at end of file
diff --git a/api/search.index/3ef5f1b607.js b/api/search.index/3ef5f1b607.js
new file mode 100644
index 000000000..3c3d725ad
--- /dev/null
+++ b/api/search.index/3ef5f1b607.js
@@ -0,0 +1 @@
+rn_("IcYAAFoidiITggLSAAAiaGR1BQLAAAATASAQwBxhcwUCwwAApxoiok0hZHNTAMAIBsQAACBt0vQaAADcAUDjxgkAALULAAChEAAAWRwAAAFA+wJ5egUCwQAAFY8eEIEaZXMhxgAAuSK/IvMEAWTlzx4AAM0fAAAXIgAAMyIAAIoiAACYIgAAEQEAEwUCwwAAIotjbIIBGwAA+4oFAsAAABO4HhDzGmFzBQLAAAAUlR/gbBxpcyHAAACNEw0fBQLDAACn2CGiayBkcxUCwQAAFSwiE10gZndXGSOCAsMAACIuaWwFg8AAABOgFtDzDvsCcnTzAP0hOA3lrAMAALMTAAByFQAAqxsAAK0hAACVIgAAQUYA")
\ No newline at end of file
diff --git a/api/search.index/3f41dc13df.js b/api/search.index/3f41dc13df.js
new file mode 100644
index 000000000..124dd5b53
--- /dev/null
+++ b/api/search.index/3f41dc13df.js
@@ -0,0 +1 @@
+rn_("IcEAAHEQnRDFAsMAACdAISAiEHMbZnODGmUDwAAAFhEgEw0fExYhYmlqzxoFGyIgIyAFIQkhpYLDAAAhAiIiIi8i8wECbHP5oRYAAAEAtgI8AzAC8wAEAAUApQD7A2FmdPMAhOHAFgAAQx0AABExygAAzB7NHjEg+wJjdA==")
\ No newline at end of file
diff --git a/api/search.index/3f4c465475.js b/api/search.index/3f4c465475.js
deleted file mode 100644
index a67357c97..000000000
--- a/api/search.index/3f4c465475.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHFAAAWGiFipByMHSUB0AAAFsAiZFcinyIlAcgAABazImTRIXgiJQHHAAAWryJkrCFuIvODAnJzJQHMAAAWsiJk0CF3IiUBxAAAFrciZBUiiCITiQLDAAAiiWNsFQHIAAAWriJkbSIVAcoAABa/ImSYIhUBygAAFr4iZJci+4UVAcYAABacImRRIvOBA2VtbvsCZG83BwD9HJARwwAAG/bGAAAdxQG5DgAA")
\ No newline at end of file
diff --git a/api/search.index/3f7c3ceedd.js b/api/search.index/3f7c3ceedd.js
new file mode 100644
index 000000000..1c3729a9d
--- /dev/null
+++ b/api/search.index/3f7c3ceedd.js
@@ -0,0 +1 @@
+rn_("QcgAAOke6h75H/ofBQLGAACiuB8wyx3MHY4fcnMxxQAAqxysHKId+8AChGHIAADlHuYe5x7oHvcf+B8FAsgAADMgISEhtCE4DCINIkgicHT7AmFyMcwAAIEggiCHIRUBwAAAGGYgZE4PtwIA/TiAA8IAABu7wQAAGrMBcA4AALHCAADREPuD")
\ No newline at end of file
diff --git a/api/search.index/400d465d84.js b/api/search.index/400d465d84.js
new file mode 100644
index 000000000..02399cbe6
--- /dev/null
+++ b/api/search.index/400d465d84.js
@@ -0,0 +1 @@
+rn_("McUAAKMdpB0gIAUCwAAAFUkdEnofcnkVAcYAABZmImbFIRUBxQAAFvIhYrofFQHAAAAUOiFjWSDzAwJzdwHFHwAAocYAAIAiZwcA/TQAF8gAAB+7xwAAIPY7MAAAAQAAPwAWABwMAgCNDgEASw8AAGwQAAB5EAAAfhAAAIYTAACxEwAA9xQAAHcVIgCjFgAA3RoAAD0cAQBAHAMAHh0AAKodAADOHQAAuR4BAM8fAAA3IQAAjSEAAF4iAAA=")
\ No newline at end of file
diff --git a/api/search.index/401137595b.js b/api/search.index/401137595b.js
new file mode 100644
index 000000000..da08bc407
--- /dev/null
+++ b/api/search.index/401137595b.js
@@ -0,0 +1 @@
+rn_("BQPAAAAViiEeEiIomiDDIWVpbaHFAADxGhWEwwAAE2ohsh8FAsMAABqOIh2rImV0IwQCxQAAIZticAHNHQAAFQHAAAAW9B5ishPzgQJudBMAAsYAACAbY3LhnBsAAPshAACABQLAAAAUdiASxR1wdQWGwQAAQg8gECAmIB8hpvIe84ECcXNRyQAAzx2TH5QfgSHaIQUCxAAAISUhuSEV9SFlchMHAsEAAB7xYnLhvRwAALAdAAAQocQAAMAWAUSJYBwAACHJAAA4Icsh+wJjeEHGAABAIp4iwyLKIiMAAsEAAB6MYWTqghoAAAAbAAB/IAAAHiIAADsiAABTIgAAXCIAAHciAACAIgAAoiIAALMiAAAAARAAEAAxxgAAuxy8HPkgBQLAAACj7xpHmCCZIJwhwiFtbmsDwgAAHPNhb3IFAsEAACaMIasiFP8bY2kBAP7AZ6wPywAAICsVzzsmahJxDPW8LRECvu05XDb [...]
\ No newline at end of file
diff --git a/api/search.index/410354f582.js b/api/search.index/410354f582.js
new file mode 100644
index 000000000..91c9a20ea
--- /dev/null
+++ b/api/search.index/410354f582.js
@@ -0,0 +1 @@
+rn_("ocoAAPAfFQHBAAAWyyJkuyJByAAA3B3dHSkgeSD7gyHDAACbE6AapYLBAAAhAiIiIi8i+wNhcnehxQAAox0VAckAABbyIWK6H/OCAmZ3BQLAAAAXmBwVex9ydNcCAP5ARBAKwwAAIfTDAAATuvsgBQAAVwSPArQCiQA3BDwH4wBEATMAewE=")
\ No newline at end of file
diff --git a/api/search.index/410bcf5052.js b/api/search.index/410bcf5052.js
new file mode 100644
index 000000000..04e00db8c
--- /dev/null
+++ b/api/search.index/410bcf5052.js
@@ -0,0 +1 @@
+rn_("NQHMAAAWnSJk/yAAIVIiJQHIAAAWtiJk9iGDIkUBxQAAFm4iZIkdih2LHcgh84ECZnQlAcgAABbAImRAIJkilwEAwAZoxQAAIsjHAAAhfPJhEAAAThI=")
\ No newline at end of file
diff --git a/api/search.index/411a9b4906.js b/api/search.index/411a9b4906.js
deleted file mode 100644
index 98325f6b9..000000000
--- a/api/search.index/411a9b4906.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAAAWuyJkkiITiALDAAAiX21vFQPAAAAW+SG13R0R+SAzZXF+IUHIAAAiIiUiOyJCIkHCAAAVISIhZCFvIQUCwAAAHKkiHYAiYWgHHIL9HwAexgAAIkHHAAAiRMcAACJL1AAAIrjJAAAijMsAACJwKwLBAAAiAm9yIcUAAJQcqCEhwQAAwR5LIiHHAAAEIhMiBQLBAAAckCETZh1tbgFG+jQdAAABAHgCEABaAA4ATQCmAIEAcwB3LgD91okTwgAAITzBAAAg+MIAACE9xwAAIevspQ4AAOgOAACnFgAAuRYAANIaAADaGgAA3xoAADkcAACcHAAASh0AAMsdAACGHgAAJiAAABYAAAARAQABBQHEAAAh+nLk3x4AAOUfAABuIAAADSEAAFIiAAAGAAD7AmNnFQHDAAAWySJkuSLzAIgBtBoAAPsDbG9y")
\ No newline at end of file
diff --git a/api/search.index/41a78134bb.js b/api/search.index/41a78134bb.js
deleted file mode 100644
index 967b72218..000000000
--- a/api/search.index/41a78134bb.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHRAAAWuiJkjSIVAdgAABbJImS5IhUB0AAAFsAiZJ8iFQHIAAAWsyJkeCIVAccAABavImRuIvODAnJzFQHMAAAWsiJkdyIVAcQAABa3ImSIIhOJAsMAACKJY2wVAcgAABauImRtIhUBygAAFr8iZJgiFQHKAAAWviJklyL7hRUBxgAAFpwiZFEi84EDZW1u+wJkb/OGwAYoFQHIAAAWPiJkfSAVAcwAABa8ImSVIhOJAsMAACIjZGsVAckAABaaImRPIhOEwAhMyQAAIlzLAAAia8cAACI9GwLTAAAilGZsFQHaAAAWyCJksSL7g2dNAP4AH6QdVYgtDjrLAAAhxUXq+TNMywAAIcfCAAAco25fEGBhAXMgAAAFAsEAABR7IhWGInFzIwIDxAAAIZ3CAAAepmFydjswAAABAAAmABEAshYAAKMaDQCwHAMAox0BAM0dAACNHgAAxB4AAOMeAwDzHgAAkR8BAPUfAQA [...]
\ No newline at end of file
diff --git a/api/search.index/41fdb873cd.js b/api/search.index/41fdb873cd.js
new file mode 100644
index 000000000..bdada1982
--- /dev/null
+++ b/api/search.index/41fdb873cd.js
@@ -0,0 +1 @@
+rn_("IcAAAHEQnRAFicUAADjuITYiNyIUeCIFAsAAABT1H2KUHZUdpSG6IbshaCJveSUBygAAFsUiZEoiqiIFjMAAABLKIRmJIhMIAsIAACIYZmnkSSEAAJ0hAAD9IQAADCIAAEgiAAABAQAxxQAAViJ0InUiNYTAAAATSCEgISEhtCExwgAA4h7jHs0hQcEAAPIf8x/0HxEiBQLAAAAlHSFHIhJHIXV58wH9AgED6KgcAACPHQAAlh8AADIgAAAmIQAApCEAACoiAAA5IgAAbSIAAAQAAAAA+wJlbPMAA3B0dQGiGgAAxQHBAAAVICB3QBwlAcAAAKROIm3jHzIi+wJkblUBxAAAEC8hc0gdph6JIIogdyExxQAAhiBQIVEhJQHEAAAWzCJkriLJIvMBAnB3AXwfAADnHAL+QEwFC8cAACFGwQAAG/nFAAAh/+HnFAAAQSIAADH7Aml5")
\ No newline at end of file
diff --git a/api/search.index/4219ec4c5b.js b/api/search.index/4219ec4c5b.js
deleted file mode 100644
index b0e647fbe..000000000
--- a/api/search.index/4219ec4c5b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAClgx0YeiBsbgGC/QkAGMYAACJB1AAAIrjBAAAhb8cAACJCKwLBAAAiAm9yIccAAAQiEyJjBAPFAAAgJWJlcAHfGgAAYcIAAIUdhh37IPwgDCH+IfsCY3T7iQ==")
\ No newline at end of file
diff --git a/api/search.index/42d6a3d3ba.js b/api/search.index/42d6a3d3ba.js
deleted file mode 100644
index 4e1967087..000000000
--- a/api/search.index/42d6a3d3ba.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocUAAPwaMcgAAGUdCiELIRUBygAAFqsiY2ciAUk7MAAAAQAAtQACABIfWgCZIFoAvwH+AEJAMcoAACE0ygAAIFc=")
\ No newline at end of file
diff --git a/api/search.index/42fd521392.js b/api/search.index/42fd521392.js
deleted file mode 100644
index 9ffdd1cdd..000000000
--- a/api/search.index/42fd521392.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUDhlxoAAJIeAAAIBQLBAAAUkSElsh9lIXFzBQLLAAAUeyIVhiJxc6HEAABBHQFFiX4fAABnBwL9EaEDywAAIZXGAAAfseeXEwAA2BQAAPwcAABvHQAAAh8AAJUfAADKHwAA1h8AABOIiAEbg8IAACIH")
\ No newline at end of file
diff --git a/api/search.index/4399f1cbf8.js b/api/search.index/4399f1cbf8.js
new file mode 100644
index 000000000..16c2e6cf0
--- /dev/null
+++ b/api/search.index/4399f1cbf8.js
@@ -0,0 +1 @@
+rn_("JQHEAAAWxSJkSiKqIiHJAADRHc4eYwADxwAAIfRjZWzp3wkAAPALAAAhDQAAww4AAFoPAACmEAAA0BQAAOkbAACQHwAAhSIAABMQIAAA")
\ No newline at end of file
diff --git a/api/search.index/43a806ac52.js b/api/search.index/43a806ac52.js
new file mode 100644
index 000000000..15e632d6a
--- /dev/null
+++ b/api/search.index/43a806ac52.js
@@ -0,0 +1 @@
+rn_("FYTAAAASqh0WDFHIAACwH14gXyDpIWUiIwMDxAAAISfEAAAh/GFncuurEAAA5hoAAFocAAC8HgAA4R4AAN0fAADnHwAAbyAAAA8hAABUIgAAYiIAAKgiAACzIQJhABEVAcYAABZoIWY+HfMCAXPhtw4AAKoQAAAQ+wJsdPMAAmFr8rIDAADKDw==")
\ No newline at end of file
diff --git a/api/search.index/43acb7851e.js b/api/search.index/43acb7851e.js
deleted file mode 100644
index 12b3754bb..000000000
--- a/api/search.index/43acb7851e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHGAAAgeyDCIXIdIEMBwARK0QAAIkrCAAAgWccAAB7/578JAAAKCgAA3RoAAPEcAACFHQAA+yAAAAwhAAD+IQAAAQARAA==")
\ No newline at end of file
diff --git a/api/search.index/440cb03834.js b/api/search.index/440cb03834.js
new file mode 100644
index 000000000..4a6707d6f
--- /dev/null
+++ b/api/search.index/440cb03834.js
@@ -0,0 +1 @@
+rn_("IcAAAFoidiKhxgAA5R8VAcQAABMZIW7VGwUCwAAAE3giY34cfxyJH4of8B/xH2x1McgAAO4hNiI3IvuJ1wEA/TSAAsUAAB/k5OIJAADaCwAAXxwAANYdAAD5HgAAAAVQGwLCAAAc4mV0")
\ No newline at end of file
diff --git a/api/search.index/4498fd7561.js b/api/search.index/4498fd7561.js
new file mode 100644
index 000000000..c6e3eae6d
--- /dev/null
+++ b/api/search.index/4498fd7561.js
@@ -0,0 +1 @@
+rn_("YcIAAGkQohzYIdkhGiIbIiUB0AAAFsQiZF0ioyIBAgLIAAAh2sUAACAQcHLhEBwAAHIcAACI+wJicjv9AUEB4AAAE3/OAAAiEA==")
\ No newline at end of file
diff --git a/api/search.index/44dda198e5.js b/api/search.index/44dda198e5.js
new file mode 100644
index 000000000..fd5d2817b
--- /dev/null
+++ b/api/search.index/44dda198e5.js
@@ -0,0 +1 @@
+rn_("AQICwwAAH8vCAAAhamZp5cEUAADjGgAAqRwAALIfAADKHwAAXyIAAAAQASUBxAAAFhwhYqYcjh0rAsEAAB/JZXJByAAAthy3HKcdqB0FAsYAABnUIaJSHXBy8wACbnSCGR0AAEUBxQAAprYiZPYh9yGDIoQiFQHBAAAWvSJklCITgwLDAAAiYW1vIcMAAPkUtR37A2F0dyUBzwAAFsIiZFkioSIlAcEAABaTImRCID4iUcEAAEoP5BrlGlQc/yH7AmNlCQLgAAAPVc8AACIVZnPvAf0RQUDNAAAiEGHIAACyHLMctBy1HKUdph0FAscAADidIZ4h/SEaSiJ0dSUByAAAFrUiZNMheiIlAccAABaxImSuIXAi84ECcnP7Amdy+wJhcgFFOzAAAAEAAJ8AAgCXHAAA4x2eAKHCAACjHocEAP0DDgzHAAAgbtAAACIUwgAAIknFAAAiK8IAACA+8n8TAABMAwFIif4cAAA [...]
\ No newline at end of file
diff --git a/api/search.index/453c5f57a3.js b/api/search.index/453c5f57a3.js
new file mode 100644
index 000000000..d559a5bcc
--- /dev/null
+++ b/api/search.index/453c5f57a3.js
@@ -0,0 +1 @@
+rn_("AQIBwgAAHSBqOzAAAAEAAPUAAgDHDgAAhRL0AAEAAeIAABwZc+5RDgAAZxsAAFUcAADEHAAAJR0AAKkdAACNHgAA6x4AAJEfAACjHwAAtR8AANofAABHIQAAJSIAAKUiAAAREwAAAAEAAGvABgTMAAAhBg==")
\ No newline at end of file
diff --git a/api/search.index/4540ebd2e5.js b/api/search.index/4540ebd2e5.js
deleted file mode 100644
index 70d5f38e3..000000000
--- a/api/search.index/4540ebd2e5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHFAAAWFiFimhwFAsAAABT2IBzOIWN0BQLAAAAW+SER+SAzcQcBhMAwYcIAACE8wQAAIPjEAAAhqMIAACE9KwLFAAAgWWN0G4nFAAAhBBcKAP0UgRfgAAALws4AACIUywAAIanCAAAa18cAACBaAT0PAAA=")
\ No newline at end of file
diff --git a/api/search.index/458c2488aa.js b/api/search.index/458c2488aa.js
new file mode 100644
index 000000000..03bf78604
--- /dev/null
+++ b/api/search.index/458c2488aa.js
@@ -0,0 +1 @@
+rn_("JQLJAAAXDyIVzCFiZhoggiLFAsAAACdAISAiEHMbZnODGjHNAAC6IbshaCLzgQJkchUBxQAAFmkhYkEdBQLBAAASQh0SQB1idPMAAXTilhMAANgUAADIHAAAAQAhxQAAPx2eHkXCwoIgAAA0/SD+IAAiqpAiJR0gRCEVHiD1G/YbCB0JHSuGwwAAHp0xwwAA9BsHHRAhFQLEAAAfpiKi3h5jcp0cBYnAAAAzhx2IHQ4hGXwg9xwC/TSYE8YAAB7gwgAAHQridRAAALcQAAADHAAAEAD7A2VpdA==")
\ No newline at end of file
diff --git a/api/search.index/45eaf9334c.js b/api/search.index/45eaf9334c.js
deleted file mode 100644
index 868fde049..000000000
--- a/api/search.index/45eaf9334c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHQAAAWpSJkZSIVAdIAABbGImStIhUBzwAAFr0iZJYi84YCY3AVAcwAABabImRQIhUBxwAAFmwiZMYh+wJycysCwQAAIaljePuH")
\ No newline at end of file
diff --git a/api/search.index/45f28fc7c6.js b/api/search.index/45f28fc7c6.js
deleted file mode 100644
index 1feb0e91e..000000000
--- a/api/search.index/45f28fc7c6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAWKiERjx9maQEFgsMAACFz/JUdAAABAFgBvQBfAAwBBABIAAUAiQB6AAUAJQHDAABANxw4HHkcehxzoxvSG/sDb3V5")
\ No newline at end of file
diff --git a/api/search.index/46c1ec4b3f.js b/api/search.index/46c1ec4b3f.js
deleted file mode 100644
index 8b8917f60..000000000
--- a/api/search.index/46c1ec4b3f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcAAAG8QmxAFicUAADjsITQiNSIUdiIFAsAAABTzH2KSHZMdoyG4IbkhZiJveSUBygAAFsMiZEgiqCIFjMAAABLIIRmHIhMIAsIAACIWZmnkRyEAAJshAAD7IQAACiIAAEYiAAABAQAxxQAAVCJyInMiNYTAAAATRiEeIR8hsiExwgAA4B7hHsshQcEAAPAf8R/yHw8iBQLAAAAlGyFFIhJFIXV58wH9AgED6KYcAACNHQAAlB8AADAgAAAkIQAAoiEAACgiAAA3IgAAayIAAAQAAAAA+wJlbPMAA3B0dQGgGgAAxQHBAAAVHiB3PhwlAcAAAKRMIm3hHzAi+wJkblUBxAAAEC0hc0YdpB6HIIggdSExxQAAhCBOIU8hJQHEAAAWyiJkrCLHIvMBAnB3AXofAADnHAL+QEwFC8cAACFEwQAAG/fFAAAh/eHlFAAAPyIAADH7Aml5")
\ No newline at end of file
diff --git a/api/search.index/470a416d9a.js b/api/search.index/470a416d9a.js
new file mode 100644
index 000000000..6215742b9
--- /dev/null
+++ b/api/search.index/470a416d9a.js
@@ -0,0 +1 @@
+rn_("pQHFAAAVIyJjqCEVAckAABZsImLqIaODwgxAzwAAIpbgAAAdwRUByQAAFpwiZFEiE4TACEzJAAAiXssAACJtxwAAIj/7AmZsFQHaAAAWyiJksyL7gw==")
\ No newline at end of file
diff --git a/api/search.index/471af4801a.js b/api/search.index/471af4801a.js
deleted file mode 100644
index b0252d9db..000000000
--- a/api/search.index/471af4801a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcIAAKEaqR5BwwAAliCXIJohwCHzAAFs6hwOAABuEAAAeBAAAJATAACbEwAAyxoAALccAADTHAAAZh0AAHwgAAAhIgAAkAAAFgAAVQHCAAAQLSFzRh2kHocgiCB1IfsDZWdsBQLAAAATHyAadSJpbjv9AUkAwwAAIZDUAAAiYg==")
\ No newline at end of file
diff --git a/api/search.index/47ce4c4310.js b/api/search.index/47ce4c4310.js
deleted file mode 100644
index 5244ca600..000000000
--- a/api/search.index/47ce4c4310.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McYAAKgfSSDZIQUCwAAAEjchEfchdHrzAIQBUSEAADHBAADYH9kfIyLzAgJpc+R4HQAAyh4AAC8gAAB/IAAAhSEAACEBACUBzAAAFrwiZC8ilSIVAcIAABKwIm2ZIiOHAscAACK2YWvnAQD9DRQAyQAAIqPhYRkAALQhAAAQ")
\ No newline at end of file
diff --git a/api/search.index/47fc01807c.js b/api/search.index/47fc01807c.js
deleted file mode 100644
index e57221217..000000000
--- a/api/search.index/47fc01807c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocgAAGgiAQQBxQAAICRyiUccAAABAAFC/VITknDywwsAAEUQBYnAAAAXPyIRbSEVAcIAAFPbGjscPBw1IVwicDohIcgAAKof5iEFicQAABKKIhGEIiOCAuAAACIGZGYTgYbEAAAhcPMAgvIADAAAyhUFAsAAAB2dIhRzH21uBQLEAAAWeSITXSJvdBUBzQAAFqsiY2ci+wNhaG9n7QDCH+vHAAAffcIAACGW1wAAIsTDAAAh7jswAAABAAAVARQAHgUAAGcJCwDNEAEAnxX0AFcZAAAAHAAA9hwBALYdAADCHQAAyR4AAG8fAACgHwAA+R8AABogAABUIAEAAiEAABchAACSIQAAzyEAAEMiAAATAP0QgQLBAAATrxlH+C224AAAIdrlGQwAAIkOAACKEwAA6BwAABUgAACNIQAAAQUQ")
\ No newline at end of file
diff --git a/api/search.index/480f88e766.js b/api/search.index/480f88e766.js
deleted file mode 100644
index 63ab6c399..000000000
--- a/api/search.index/480f88e766.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAT/x8QvhxhcwUCwwAApxgiokshZHNTAMAIBsQAACBr0vIaAADcAQABwAAADrdw48QJAACzCwAAnxAAAFccAAABQKHWAACOIjHGAACoH0kg2SEFAsAAABI3IRH3IXR68wCEAVEhAAAxwQAA2B/ZHyMi8wICaXPkeB0AAMoeAAAvIAAAfyAAAIUhAAAhAQAlAcwAABa8ImQvIpUiFQHCAAASsCJtmSIjhwLHAAAitmFrBQLAAACwxxAZoyJsd/cBAv0NFALgAAAgC+ILDAAAYRkAALQhAAABACUBwgAAF6UhbeUb8xxDAf0CRQDCAAAei8cAACATyAAAIHaDXiAAAAEDAscAACKpwgAAHopiZIlYGQAAtw0A/ZFRwMwAACKA4AAADibh/g4AACwPAAAB")
\ No newline at end of file
diff --git a/api/search.index/4839faf7ed.js b/api/search.index/4839faf7ed.js
deleted file mode 100644
index 7debc583f..000000000
--- a/api/search.index/4839faf7ed.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQPAAACisx4S0R4XOh1hb3IxwwAAsh5GIRYiBYzAAAAiUx3IISnTIYciIccAANQecB8FAsYAABnAIRnBIWN2BQLAAAAUkBMdFCFvcgUCwAAAFJ4hHHcgY2z3CwD9PaEOxAAAGtHJAAAe18MAABOPyQAAHtg6MAAAAQAAAAAAHQAQAAAAowGkAaUBngRID7sa4hrjGlIctBy1HKUdph3nHuge9x/4HwIgAyAeIR8hRyGbIZwhsiH7If0hCiILIkYi")
\ No newline at end of file
diff --git a/api/search.index/48506b6877.js b/api/search.index/48506b6877.js
new file mode 100644
index 000000000..d46ba9590
--- /dev/null
+++ b/api/search.index/48506b6877.js
@@ -0,0 +1 @@
+rn_("BQLEAAAhJSG5IRX1IWVyEwUCwQAAHvFicuTqGwAAvRwAAPwcAACwHQAApCIAABEAAKHGAABCISMBAsMAABz0ZnDkOBwAAJ8eAADkHwAANCAAAIsgAAAABVD7Am50")
\ No newline at end of file
diff --git a/api/search.index/4852a4af1c.js b/api/search.index/4852a4af1c.js
deleted file mode 100644
index 9cad10aa2..000000000
--- a/api/search.index/4852a4af1c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAV1x4U8SFjcxUBwgAAErAibZkiI4cCxwAAIrZhayMOAskAACKjYWMBtCEAACvABGB9ZJr/0sQAAB6lawPgAAAgEDFlaQ==")
\ No newline at end of file
diff --git a/api/search.index/488666e5d2.js b/api/search.index/488666e5d2.js
deleted file mode 100644
index f08a844f2..000000000
--- a/api/search.index/488666e5d2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUE6MAAAAQAAAAAAEAAQAAAAcBB2EMYQ6xvwG9keqR+qH64ftB9cIF0gdSATIeYh5yFjIkHCAACaE+MU1CHVIbHHAADbH6UBwgAAF4AhbSAcoccAAFQgocMAAOwb8wDAjAEBmhAAAPuO")
\ No newline at end of file
diff --git a/api/search.index/48ab820650.js b/api/search.index/48ab820650.js
deleted file mode 100644
index e3d550318..000000000
--- a/api/search.index/48ab820650.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQQBxAAAHcNyiY4aAABxwQAAlBzTHkYgRyCoIQAiICJTAAPGAAAdx2VodORZCQAAliAAAJohAADAIQAALSIAALEAEA==")
\ No newline at end of file
diff --git a/api/search.index/48fba0a0ab.js b/api/search.index/48fba0a0ab.js
deleted file mode 100644
index 9aea69d5f..000000000
--- a/api/search.index/48fba0a0ab.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McUAAOYb9Bz1HCUBxgAAFsgiZHUisSLzgQJldyHAAAC2Hv8fJZDCAAAkgiH4IfEbwB1BxQAA2h3bHScgdyD7/QAgCw==")
\ No newline at end of file
diff --git a/api/search.index/49205f07dd.js b/api/search.index/49205f07dd.js
deleted file mode 100644
index 3f7e7da0c..000000000
--- a/api/search.index/49205f07dd.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAAAWuyJkkiIThgLDAAAiX21vFQHMAAAWZCJmwyEbmMEAACH8IcgAACkglSHbBMkAACGgYXFzdBuKwgAAHTs=")
\ No newline at end of file
diff --git a/api/search.index/4a1d302c10.js b/api/search.index/4a1d302c10.js
new file mode 100644
index 000000000..254da9a14
--- /dev/null
+++ b/api/search.index/4a1d302c10.js
@@ -0,0 +1 @@
+rn_("JQHFAAAWHCFiphyOHSUB0AAAFsIiZFkioSIlAcgAABa1ImTTIXoiJQHHAAAWsSJkriFwIvODAnJzJQHMAAAWtCJk0iF5IiUBxAAAFrkiZBciiiITiQLDAAAii2NsFQHIAAAWsCJkbyIVAcoAABbBImSaIhUBygAAFsAiZJki+4UVAcYAABaeImRTIvOBA2VtbvsCZG83BwD9HJARwwAAG/jGAAAdxwG7DgAAAQABwgAAHcNi+b0OAACSAIkLNwUBABYA+QB0AOoA8wABdNJaIgAAHAWJwAAApeUfEqcfAQcBwwAAIpJm56weAAABIQAANiEAAD0hAABBIQAARSEAACgiAADGIgAAYAAAARsCxQAAIFpjdBUBxAAAExkhbtUbBQLAAAAV5B8mqR/gH2xuBQLAAAATeCJjfhx/HIkfih/wH/EfbHUFA8MAABhNIhJmIRg9ImN1dyMEAsUAACAZYnAB1BoAADHHAADuITY [...]
\ No newline at end of file
diff --git a/api/search.index/4a65e637bc.js b/api/search.index/4a65e637bc.js
new file mode 100644
index 000000000..a2db1cf6a
--- /dev/null
+++ b/api/search.index/4a65e637bc.js
@@ -0,0 +1 @@
+rn_("BQLAAAAXzyEivhaxHW95BQLAAAAnBSIUIhMDImVwJQHPAAAWzCJkriLJIiUBxwAAGGUiZ2MiqSIlAcYAABbDImRcIqIi84IDZWxw84KDJQHEAAAWtCJk0iF5IhOCAsYAAB+rYmnzAAJpdAGSIQAABQLAAAClrh0VrR1hcgFA6TIPAABWHQAA3B4AABshAABYIQAAaCEAAG0hAACWIQAA3SEAAGYiAAABEJAQkEMBA8YAACEVwAAAIBJpdnnk5RsAAPAcAAAeIQAAsiEAAPQhAAABAQAhxQAAzx+NIaHGAAA7IsMB/RUAAsQAACGOxAAAG986MAAAAQAAAAAAEwAQAAAAIwy8FPUa0RvSG7gc2B7BHy4gJyFlIY4hkCGRIZohnyGgIRAiKSK6IiHAAACkGjwdWwTEAAAcwcYAACD8ZG1vdgEEhMEAAB/24TogAACRIAAAMwEAAswAACI40gAAInhhcAHCFgAAGwLCAAA [...]
\ No newline at end of file
diff --git a/api/search.index/4a89e70a68.js b/api/search.index/4a89e70a68.js
new file mode 100644
index 000000000..74a500690
--- /dev/null
+++ b/api/search.index/4a89e70a68.js
@@ -0,0 +1 @@
+rn_("oc4AADsiQcMAAPce+B5KIPYgFYHHAAAcrCKhISMDwQCgwQAAIjjFAAAgDgG1IQAA+wJobzMAA8wAACHPY2V088oWAAC9AyMB")
\ No newline at end of file
diff --git a/api/search.index/4a96ea38d4.js b/api/search.index/4a96ea38d4.js
deleted file mode 100644
index bfebbb935..000000000
--- a/api/search.index/4a96ea38d4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHPAAAWyiJkrCLHIkUBxwAAGGMiZ2AiYSKmIqciAUblVB0AABkhAABWIQAAZiEAAGshAABkIgAAEJAQJQHGAAAWwSJkWiKgIhUByAAAEAchc74focQAALcc+wJvcvcCAP00yADFAAAhzuW/DgAAVw8AAJ4cAAA8HQAARB0AAMMhAAAQABA=")
\ No newline at end of file
diff --git a/api/search.index/4acc4a8682.js b/api/search.index/4acc4a8682.js
new file mode 100644
index 000000000..8eac57d9d
--- /dev/null
+++ b/api/search.index/4acc4a8682.js
@@ -0,0 +1 @@
+rn_("QcYAAEAiniLDIsoi8wABZOqCGgAAABsAAH8gAAAeIgAAOyIAAFMiAABcIgAAdyIAAIAiAACiIgAAsyIAAAABEAAQAA==")
\ No newline at end of file
diff --git a/api/search.index/4ada2203f6.js b/api/search.index/4ada2203f6.js
new file mode 100644
index 000000000..0becd88fe
--- /dev/null
+++ b/api/search.index/4ada2203f6.js
@@ -0,0 +1 @@
+rn_("oc4AACQgBcjCYEAAAKcKIRNzIkLeHN8cGx0cHaLgHHWBxgAAFSkiKCEpISohKyG8Ib0hviEhxgAAYiGcIvMCAmR25WkbAAA5HQAADx8AACwiAABRIgAAliIAADAAAMHKAACRIAUCwgAA4mAd5Pkea3bhygAAiyChxAAABxz7wAhD+wJlbSHSAABiIqgiWwPNAAAiE2xvcqHDAADPEAFCOzAAAAEAAPYAAgBqEAAAxhP1AAFA42EOAADFFgAA5BwAAL8eAAAAUCUBxQAAJmwicSJi6iHvIaUBwQAAFH8hZoYipQHCAAAUpiFmjCL7iaHDAABWIDHFAADVHkggSSB3AQHCAE3gAAAd3va7GwAAfQGdALgBCAIDAFUBwgAAExkhbn8a1RsHHAgcyx/7A2VseFUBxAAAuEohZKUT9RT2FDUdvB8bAswAACJbcnQVAcEAAKQTIG2KHvMChIJQHQAApQHBAACkwCFtfSHzB4T [...]
\ No newline at end of file
diff --git a/api/search.index/4b3ba3dbf9.js b/api/search.index/4b3ba3dbf9.js
new file mode 100644
index 000000000..dcffc0f9c
--- /dev/null
+++ b/api/search.index/4b3ba3dbf9.js
@@ -0,0 +1 @@
+rn_("BQLAAAAXzyEivhaxHW95ocYAAK4dAUThOiAAAJEgAAAzcwHDCIjDAAAcX8kAACId5B8MAACPDgAAuxMAANQUAACDHAAAIgAA")
\ No newline at end of file
diff --git a/api/search.index/4b7a606aff.js b/api/search.index/4b7a606aff.js
deleted file mode 100644
index 7749bf8be..000000000
--- a/api/search.index/4b7a606aff.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAACkESBtiB7zAoSCTh0AAKUBwQAApL4hbXsh8weE9UUgAAA8AAEANAGHAGsDxQAAH6Zjb3BFhMMAABEPIqIhKCI3ImsiE4gCwgAAIaNzdAUCwwAAJjUhXCKk1h9tcwUCwAAAFdEeFqUfY2wlAcUAABaaImRPIpQiE4PACETLAAAh5sIAACIzocYAAIYed1QA/eT4B8UAAB7SzwAAIefKAAAhks0AACIBzQAAIgLCAAAbujswAAABAABbABwADwwEAK0OAAD/DioAtRYBACQcAACRHAAAKh0AAGQdAADDHQAAkB4AANAeAABwIAAAUiEAAGAhAADzIQAA+iEAAPwhAAA+IgAAbCIAAJEiAACaIgIApSIAAK4iAQCyIgMAtyIAALoiCQDGIgAAyCICAFUDwAAAFnkfJJkTnhqq7h9hb3YEDLgOQQ+XG9scMcEAAOwhNCI1IhUBwAAAHisicL0T84GK+wNhbHQ=")
\ No newline at end of file
diff --git a/api/search.index/4b950f79a1.js b/api/search.index/4b950f79a1.js
new file mode 100644
index 000000000..9f163c97a
--- /dev/null
+++ b/api/search.index/4b950f79a1.js
@@ -0,0 +1 @@
+rn_("ccEAAKwfsB9eIF8g6CHpIWUiocIAANYhsccAAN0fpQHCAAAXgiFtIhyhxwAAViChwwAA7hvzAMCMAQGcEAAA84OO")
\ No newline at end of file
diff --git a/api/search.index/4c1bd7efc1.js b/api/search.index/4c1bd7efc1.js
deleted file mode 100644
index 371def384..000000000
--- a/api/search.index/4c1bd7efc1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQHFAAAWYiFiOB0OHw8fRQLAAAAXFyIV/yFmdFkd9B5kIE0hBQLAAAAkNx0NHxZxIm9yoc8AAHwiFYLGAAAUEiG+HXcFAcILyMIAAB1uxAAAIkfkZRAAAL8TAAAJHQAAUiAAAEghAAACECAlhMIAABGBIeAfViD7AmVs")
\ No newline at end of file
diff --git a/api/search.index/4cd10d608f.js b/api/search.index/4cd10d608f.js
deleted file mode 100644
index 543345f01..000000000
--- a/api/search.index/4cd10d608f.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McMAAPwbqR1EIqWEwgAAEQkinQ4xxwAA3hvfG1wdNYTGAAARxh/EGsUaAhwBRjswAAABAAC1AAIAEh9aAJkgWgA1AcsAABSQImYmIsQixSL7AnFyYcQAAIATgROCE4MTxhbHFvcDAP0U4AzEAAAb5zowAAABAAAAAAAgABAAAAD8Cz4OPw5ADkEOQg5DDkQORQ5GDkcO3xCyGroa1xvYGxccGBwZHDccOBxbHHkcehz0HzEgSiBYIPUgLSE+IR4iqiI=")
\ No newline at end of file
diff --git a/api/search.index/4d8b807768.js b/api/search.index/4d8b807768.js
new file mode 100644
index 000000000..315f15f3e
--- /dev/null
+++ b/api/search.index/4d8b807768.js
@@ -0,0 +1 @@
+rn_("McUAAOgb9hz3HCUBxgAAFsoiZHcisyLzgQJldyHAAAC4HgEgJZDCAAAkhCH6IfMbwh1BxQAA3B3dHSkgeSD7/QAgCw==")
\ No newline at end of file
diff --git a/api/search.index/4db7e33c0e.js b/api/search.index/4db7e33c0e.js
deleted file mode 100644
index c711a3594..000000000
--- a/api/search.index/4db7e33c0e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcIAAHcfoCEVAc4AABarImNnIvMDAWPh9hwAAG8fAAAQMcEAAGUbZhuLHm8B/QGhBMMAAB17xgAAIHMFAsAAAD9UInIicyI3HCGwIbEhYXIjAwPAAAAd4MQAACGNZXBzAd4aAAD7AmF5")
\ No newline at end of file
diff --git a/api/search.index/4dec245c46.js b/api/search.index/4dec245c46.js
new file mode 100644
index 000000000..c6f22f944
--- /dev/null
+++ b/api/search.index/4dec245c46.js
@@ -0,0 +1 @@
+rn_("FQHQAAAWpyJkZyIVAdIAABbIImSvIhUBzwAAFr8iZJgi84YCY3AVAcwAABadImRSIhUBxwAAFm4iZMgh+wJycysCwQAAIatjePuH")
\ No newline at end of file
diff --git a/api/search.index/4e0cc3693e.js b/api/search.index/4e0cc3693e.js
deleted file mode 100644
index 649c7fb27..000000000
--- a/api/search.index/4e0cc3693e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHAAABEvSF8In0ipCJsWSIVAcIAABKwIm2ZIiOFAscAACK2YWsVAcUAAES9IXwifSKkImxZIvsCcnNBwwAAvx+OIY8hDiIxxgAAqB9JINkhBQLAAAASNyER9yF0evMAhAFRIQAAMcEAANgf2R8jIvMCAmlz5HgdAADKHgAALyAAAH8gAACFIQAAIQEAJQHMAAAWvCJkLyKVIiGHAscAACK2CmFr5wEC/Q0UAMkAACKj4WEZAAC0IQAAECUBwgAAF6UhbeUb8xxDAf0CRQDCAAAei8cAACATyAAAIHaDXiAAADMDA9UAACKPZWltgiwPAAAxxAAATB1NHVUhBQLAAAAS3RscKiJtcCHGAAC3Ir0i8wABZOXNHgAAyx8AABUiAAAxIgAAiCIAAJYiAAARAQDzAQFjATIOAAD7wAQGJQHGAAAWvyJkPyCYIgUCxAAAGE0hFLkeZGZTAAPGAAAhBWFzdfXzCwAAAQAjArg [...]
\ No newline at end of file
diff --git a/api/search.index/4e1ca32ba8.js b/api/search.index/4e1ca32ba8.js
deleted file mode 100644
index 3b53f3c42..000000000
--- a/api/search.index/4e1ca32ba8.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McMAAOsUeiGhIXX9wiAQGQAAphAfG3ohHKAhFOAcHKEhqQ6qDqsOrA77DvwO/Q6hxAAAESAjAMAIQsMAAB0W4AAAEN/mVA8AAI0cAACIHgAA8B8AAAciAAAJIgAADyIAACMCAAC7wATKwgAAG+DAAAAdJQ==")
\ No newline at end of file
diff --git a/api/search.index/4e58755016.js b/api/search.index/4e58755016.js
new file mode 100644
index 000000000..daa607ecb
--- /dev/null
+++ b/api/search.index/4e58755016.js
@@ -0,0 +1 @@
+rn_("FQHBAAAWvSJklCITjALDAAAiYW1vBQLFAAAUDyAVdiBxc/uJpQHJAAAU+CFmnyIlAckAABaTImRCID4iJQHMAAAWtyJk9yGEIiUBzAAAFrYiZPYhgyL7hecBAf0EMA7HAAAhksIAAB6z4hwOAADvGgAA3xsAAAEAVQHGAAATVCBm/RzuH+8fmiDDISUBxAAAFsUiZEoiqiIjAgLHAAAh9GNs5MMOAABaDwAA6RsAAJAfAACFIgAAAgAAe4/AAAAOHQ==")
\ No newline at end of file
diff --git a/api/search.index/4e7655f08a.js b/api/search.index/4e7655f08a.js
new file mode 100644
index 000000000..bc506a13f
--- /dev/null
+++ b/api/search.index/4e7655f08a.js
@@ -0,0 +1 @@
+rn_("McUAAKMdpB0gIAEAAcUAACK+ZPtTDgAAAQA6DN8AIQMPAO8AFACNAgQAZgAbyCAgxAAAHUnBAAAfehUBxgAAFmYiZsUhFQHFAAAW8iFiuh8VAcAAABQ6IWNZIPMDAnN3AcUfAAClAcMAABTLH2ZfIjHAAADyDnEbkB6lAcYAABQxIWZ7IgWDwAAApIAiVbAfXiBfIOkhZSIVwMANAAAAFuIdGE8hFLse8Q6nBwD9LGAGywAAIiHOAAAiW/PcCQAAHgv1CWcHAP00ABfIAAAfu8cAACD2OzAAAAEAAEMAGAAcBQEAZQkBABwMAgCNDgEASw8AAGwQAAB5EAAAfhAAAIYTAACxEwAA9xQAAHcVIgCjFgAA3RoAAD0cAQBAHAMAHh0AAKodAADOHQAAuR4BAM8fAAA3IQAAjSEAAF4iAAA=")
\ No newline at end of file
diff --git a/api/search.index/4e7893a101.js b/api/search.index/4e7893a101.js
deleted file mode 100644
index 5fd3f04ad..000000000
--- a/api/search.index/4e7893a101.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcMAAJYglyCaIcAh8wABbOocDgAAbhAAAHgQAACQEwAAmxMAAMsaAAC3HAAA0xwAAGYdAAB8IAAAISIAAJAAABYAAA==")
\ No newline at end of file
diff --git a/api/search.index/4e9b2ffbf7.js b/api/search.index/4e9b2ffbf7.js
deleted file mode 100644
index f72e5beb2..000000000
--- a/api/search.index/4e9b2ffbf7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BYnAAAAXPyIRbSEFicQAABKKIhGEIiOFAuAAACIGZGYFAsQAABZ5IhNdIm90GwLNAAAinWhvNwGDwA5pwgAAIZbXAAAixMMAACHuxAAAIgc=")
\ No newline at end of file
diff --git a/api/search.index/4f0cb84fa6.js b/api/search.index/4f0cb84fa6.js
deleted file mode 100644
index cca099f56..000000000
--- a/api/search.index/4f0cb84fa6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHGAAAWGSFmnhwJAtAAACIFzQAAIZRlbaUCxgAAFhghGOshYnecHPMBwIJA4gYMAABTDgAAoB4AACMAK8GAIMAAACBZUrlcgCI=")
\ No newline at end of file
diff --git a/api/search.index/4f1125e741.js b/api/search.index/4f1125e741.js
deleted file mode 100644
index b26b9f8a3..000000000
--- a/api/search.index/4f1125e741.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHEAAAaGyJ3gRwVAcQAABoaIneAHPsCY3RBwQAAXhCuHAwg8SFlwMEDQAAApEgdFqsiFcwdARUCFWUdCiELIWciocUAAK4hFQHAAAAUrSFjyB0VAckAABZvImLtIfOFwghAE4EC4AAAH3Zkc/sCb3ZxwQAAVRxWHLIekB83IUYhFiL7/RBBAg==")
\ No newline at end of file
diff --git a/api/search.index/4f60528ef3.js b/api/search.index/4f60528ef3.js
new file mode 100644
index 000000000..0bd850eba
--- /dev/null
+++ b/api/search.index/4f60528ef3.js
@@ -0,0 +1 @@
+rn_("scIAABkcpQHFAAAVIyJjqCEVAckAABZsImLqIVOFwghA4AAAHcHzgQJkaRWEwQAAp9IdmxsTAALgAAAgWmFz9acQAAApCpUAdwRKAiHBAADCGn0dvwD+QAIQisgAACFrwAAAEKB8CeNlkg==")
\ No newline at end of file
diff --git a/api/search.index/4f8743bf3a.js b/api/search.index/4f8743bf3a.js
new file mode 100644
index 000000000..64af13f92
--- /dev/null
+++ b/api/search.index/4f8743bf3a.js
@@ -0,0 +1 @@
+rn_("QcgAACQiJyI9IkQiQcIAABchJCFmIXEhAQMCxwAAIqvCAAAejGJkiVoZAAAbA8wAACKCwgAAIA1haGlVAcAAABtyImPHC8gLgRrDGsQaAUiJcR0AABUB0QAAFrwiZI8iFQHYAAAWyyJkuyIVAdAAABbCImShIhUByAAAFrUiZHoiFQHHAAAWsSJkcCLzgwJycxUBzAAAFrQiZHkiFQHEAAAWuSJkiiITiQLDAAAii2NsFQHIAAAWsCJkbyIVAcoAABbBImSaIhUBygAAFsAiZJki+4UVAcYAABaeImRTIvOBA2VtbvsCZG/zhsAGKBUByAAAFkAiZH8gFQHMAAAWviJklyITiQLDAAAiJWRrFQHJAAAWnCJkUSIThMAITMkAACJeywAAIm3HAAAiPxsC0wAAIpZmbBUB2gAAFsoiZLMi+4NnTQD+AB+kHW2TpOB6ywAAIcdN7CRcRssAACHJwgAAHKU8gpMyAgF1IAA [...]
\ No newline at end of file
diff --git a/api/search.index/4fde30fff1.js b/api/search.index/4fde30fff1.js
new file mode 100644
index 000000000..06efd97e6
--- /dev/null
+++ b/api/search.index/4fde30fff1.js
@@ -0,0 +1 @@
+rn_("FQHFAAAWGCFinBwFAsAAABT4IBzQIWN0BQLAAAAW+yER+yAzcQcBhMAwYcIAACE+wQAAIPrEAAAhqsIAACE/KwLFAAAgW2N0G4nFAAAhBhcFAP0EgRfOAAAiFssAACGrwgAAGtnHAAAgXAE/DwAAIwACwwAAIpJmZ+esHgAAASEAADYhAAA9IQAAQSEAAEUhAAAoIgAAxiIAAGAAAAE=")
\ No newline at end of file
diff --git a/api/search.index/50176be01b.js b/api/search.index/50176be01b.js
new file mode 100644
index 000000000..e8e7e9fab
--- /dev/null
+++ b/api/search.index/50176be01b.js
@@ -0,0 +1 @@
+rn_("ZQHAAACmtiJkayH2IfchYSKDIoQiJQHMAAAWtyJk9yGEIhWExAAAEYMhWCDzBgFm8yQcAACjARkBJQHLAAAWtiJk9iGDIqHUAACQIlvEAAzIAAAhlPv9EQEC")
\ No newline at end of file
diff --git a/api/search.index/5028f39ef8.js b/api/search.index/5028f39ef8.js
deleted file mode 100644
index 80899b43d..000000000
--- a/api/search.index/5028f39ef8.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHGAAAWkSJkQCA8IgECAcMAACKQZueqHgAA/yAAADQhAAA7IQAAPyEAAEMhAAAmIgAAxCIAAGAAAAGTAP0SAQHCAAAclsYAAB7ZhIEeAAA=")
\ No newline at end of file
diff --git a/api/search.index/5095cf32bc.js b/api/search.index/5095cf32bc.js
new file mode 100644
index 000000000..7fde7aa81
--- /dev/null
+++ b/api/search.index/5095cf32bc.js
@@ -0,0 +1 @@
+rn_("JQHFAAAY9CFjkB+FIjUBxAAAFqciZIUhhiFnIiuJwgAAHVRjAAPEAAAhZWF0deSuEwAAaxUAAMsdAABvHwAAjh8AAAIRAKHGAAC9H1WCwAAAFbwf7BpSHVMduB+5H/sCZnQbisUAAB7vIcAAAF0c9yChxAAAJCBjAcAIQsMAACH45sAbAAChHwAAyB8AAGMgAACVIAAAUCIAAJ8iAADQAAAQNQHEAAAWnSJk/yAAIVIiFxkD/SeJB8IAAB2pwwAAIcnEAAAfj8EAABrryAAAIdTHAAAiled8EAAA3BAAAMYaAAAEHAAADh8AAAchAADVIQAAiSIAAAQQAAArAsAAAAwacHM=")
\ No newline at end of file
diff --git a/api/search.index/50dc77228a.js b/api/search.index/50dc77228a.js
new file mode 100644
index 000000000..3f832bdb2
--- /dev/null
+++ b/api/search.index/50dc77228a.js
@@ -0,0 +1 @@
+rn_("ockAADsiFQHDAAAWyyJkuyLzAogBthoAAFMAj8MAABxZwAAAIfTShA4AAKkxxgAAuxy8HPkgBQLAAACsfiJGmCCZIJwhwiFjZqHDAADvGvsCbW7r/QFABcIAABzz")
\ No newline at end of file
diff --git a/api/search.index/50f70fe58a.js b/api/search.index/50f70fe58a.js
deleted file mode 100644
index 1705bd34b..000000000
--- a/api/search.index/50f70fe58a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FYHCAAATqR9oIXUBwAAAFpgcYv0L/gsxDzIPMw80DzUPAUA7MAAAAQAAngABALYYngArisMAABylFQHIAAAWqyJjZyIBROJLIAAAdyEAABEiAABiAPvAAcBBwgAAvha/FkEdQh0TAALgAAAaumVzOzAAAAEAAPgAAwAgDAAAXw/0AGwVAgD7/QhgBA==")
\ No newline at end of file
diff --git a/api/search.index/5160fd7f53.js b/api/search.index/5160fd7f53.js
new file mode 100644
index 000000000..f2330c5c7
--- /dev/null
+++ b/api/search.index/5160fd7f53.js
@@ -0,0 +1 @@
+rn_("AQIBwgAAG7x05hEMAAC3FgAAxR0AANIeAAD1IQAA/CEAAP4hAABBAAAAFQHFAAAWaSFiQR0FAsEAABJCHRJAHWJ0FQHMAAAWDiJiKCAzAAPOAAAiWGV0d/aWEwAALAEWAAEA7wdOBQUCwAAAxpEgFGscY24FAsEAACI/HZ4e4OocZG1blsEAAB3OBQLBAAAWyR8RBRxibysCwgAAIgFhchUBwwAAqGoidwQhRcLCgiAAADT9IP4gACKqkCIlHSBEIRUeIPUb9hsIHQkdK4bDAAAenQUDwQAApHYfMfQbBx0QISR0H64fZWx4FQLDAAAfpiKi3h5jcp0cFQHEAAASRR1y3hrzAAFmAdIUAAD7AmRuAYL9CQAYxgAAIkPUAAAiusEAACFxxwAAIkQrAsEAACIEb3IhxwAABiIVImMEA8UAACAnYmVwAeEaAAAxwgAAhx2IHQ4h+wJjdBuJyAAAIHxlgcUAABWgIeke6h7 [...]
\ No newline at end of file
diff --git a/api/search.index/518b58a5d1.js b/api/search.index/518b58a5d1.js
new file mode 100644
index 000000000..7d929c240
--- /dev/null
+++ b/api/search.index/518b58a5d1.js
@@ -0,0 +1 @@
+rn_("AQIBwgAAHTtt5rgTAAATIAAAJCAAABIhAADAIQAA6yEAAE4iAAAREREQpQHGAACkLSFiXB0VAcUAABDIHHMDHPvAAMQbA8kAACGA4AAAHpNhZXM=")
\ No newline at end of file
diff --git a/api/search.index/529b80ec5d.js b/api/search.index/529b80ec5d.js
deleted file mode 100644
index 671c562e7..000000000
--- a/api/search.index/529b80ec5d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHLAAAWySJkuSIbAtIAACK4YXMhxQAAJBylIgEEAcgAACHYcIlwHAAApYHIAAAVniECIKWBxAAAFSwgHx3zAAJjdOFVEAAAZxwAADEVgcgAABWdIQEgKwLNAAAh/WFyBQLLAAAUeyIVhiJxc/MIAXCJlR8AAKWBxwAAFSUhuh6lAc0AABSQImbEIiMAwADCwAAAHpHHAAAhqwFUEAAA8wLABM3hwRYAAO8aAAAR+4c=")
\ No newline at end of file
diff --git a/api/search.index/52b95c8022.js b/api/search.index/52b95c8022.js
deleted file mode 100644
index 6d3adf0a4..000000000
--- a/api/search.index/52b95c8022.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcgAAOce6B73H/gfBQLGAACith8wyR3KHYwfcnMxxQAAqRyqHKAd+8AChGHIAADjHuQe5R7mHvUf9h8FAsgAADMeIR8hsiE4CiILIkYicHT7AmFyMcwAAH8ggCCFIRUBwAAAGGQgZEwPtwIA/TiAA8IAABu5wQAAGrEBbg4AALHCAADPEPuD")
\ No newline at end of file
diff --git a/api/search.index/52bab07dba.js b/api/search.index/52bab07dba.js
new file mode 100644
index 000000000..fc88bc7d0
--- /dev/null
+++ b/api/search.index/52bab07dba.js
@@ -0,0 +1 @@
+rn_("FYHCAAATqx9qIXUBwAAAFpocYv8LAAwzDzQPNQ82DzcPAUA7MAAAAQAAngABALgYngArisMAABynFQHIAAAWrSJjaSIBROJNIAAAeSEAABMiAABiAPvAAcBBwgAAwBbBFkMdRB0TAALgAAAavGVzOzAAAAEAAPgAAwAiDAAAYQ/0AG4VAgD7/QhgBA==")
\ No newline at end of file
diff --git a/api/search.index/52c10e7a26.js b/api/search.index/52c10e7a26.js
deleted file mode 100644
index 2f8a14a17..000000000
--- a/api/search.index/52c10e7a26.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHFAAAY8iFjjh+DIjUBxAAAFqUiZIMhhCFlIiuJwgAAHVJjAAPEAAAhY2F0deSsEwAAaRUAAMkdAABtHwAAjB8AAAIRAKHGAAC7H1WCwAAAFbof6hpQHVEdth+3H/sCZnQbisUAAB7tIcAAAFsc9SChxAAAIiBjAcAIQsMAACH25r4bAACfHwAAxh8AAGEgAACTIAAATiIAAJ0iAADQAAAQNQHEAAAWmyJk/SD+IFAiFxkA/SeJB8IAAB2nwwAAIcfEAAAfjcEAABrpyAAAIdLHAAAik+d6EAAA2hAAAMQaAAACHAAADB8AAAUhAADTIQAAhyIAAAQQAAA=")
\ No newline at end of file
diff --git a/api/search.index/52ca9c28e3.js b/api/search.index/52ca9c28e3.js
new file mode 100644
index 000000000..22ae6f7a1
--- /dev/null
+++ b/api/search.index/52ca9c28e3.js
@@ -0,0 +1 @@
+rn_("AUE7MAAAAQAAGAECAKQWAQBlGRYBFQHGAAAWyyJkuyLzAYEBLQ8AADMAxAJU4AAAE5/GAAAiIccAAB+xAckLAAA=")
\ No newline at end of file
diff --git a/api/search.index/530ef5a175.js b/api/search.index/530ef5a175.js
new file mode 100644
index 000000000..e02ed38fb
--- /dev/null
+++ b/api/search.index/530ef5a175.js
@@ -0,0 +1 @@
+rn_("BQLAAAAnBSIUIhMDImVwJQHPAAAWzCJkriLJIiUBxwAAGGUiZ2MiqSIlAcYAABbDImRcIqIi84IDZWxw84ODMcEAAB4hsiGzISHBAACkGjwdAYECzAAAIjjSAAAieGFwFQHGAAAgfSDEIXIfIPMDAXAB3xoAABuJwwAAHZa3AwD9NEECxgAAH/b0TQ8AADANMAEtAQ==")
\ No newline at end of file
diff --git a/api/search.index/531d9709f9.js b/api/search.index/531d9709f9.js
new file mode 100644
index 000000000..c7af819af
--- /dev/null
+++ b/api/search.index/531d9709f9.js
@@ -0,0 +1 @@
+rn_("ocIAANIdccEAAKwfsB9eIF8g6CHpIWUiocIAANYhsccAAN0fpQHCAAAXgiFtIhyhxwAAViChwwAA7hvzAMCMAQGcEAAA+44rAsUAAB3IY3QzAAPFAAAh82FydujCCwAAiBoAAOoaAAD6HAAArh0AAKAeAADlHwAAQiEAABwiAAABAREREA==")
\ No newline at end of file
diff --git a/api/search.index/534416c0cc.js b/api/search.index/534416c0cc.js
new file mode 100644
index 000000000..a3dbe9b09
--- /dev/null
+++ b/api/search.index/534416c0cc.js
@@ -0,0 +1 @@
+rn_("IcUAAFoidiIFAsAAABetIRO3Hml5pQHNAAAUkiJmxiIFAsAAABOzHRh4IHJ1RQHCAAAXpyFt5xvuG+8b9RwVAcIAABSWIGPhHyUBwgAAEkUdct4a8hzzgQJlbCUBxQAAGZYiZiwdciAFAsEAABGNHhd1IGlwIccAAA8hVCIJlMgAACIB0AAAInfzgQJmbCsCywAAIjhydAEA/sBMtQs8NLJ/vFHAy2U2clpf8SgSRm1YEscAACAVcwz3RyrAAAAekyysvZA/0gAAInjHAAAgSgfmITqXY4RbDOt2cDS0U/uwDgAApgF8BPAB2AR8BEoAAQABAKYBAgA=")
\ No newline at end of file
diff --git a/api/search.index/534c757dbe.js b/api/search.index/534c757dbe.js
new file mode 100644
index 000000000..5bdf299c0
--- /dev/null
+++ b/api/search.index/534c757dbe.js
@@ -0,0 +1 @@
+rn_("FQPGAAAxYyCVIFAiFoUiGJUiaXN0Dh+xyQAAeSEhxAAA3BwKIKUBwQAApBIhbdYfEwQCwQAAIEVpcuRuHQAA7R4AADAgAABpIAAAxiEAABEAAPMA/RQhAOFSHAAA/x8AAAE=")
\ No newline at end of file
diff --git a/api/search.index/535f5756ae.js b/api/search.index/535f5756ae.js
new file mode 100644
index 000000000..09ac9ed0b
--- /dev/null
+++ b/api/search.index/535f5756ae.js
@@ -0,0 +1 @@
+rn_("QcAAADkcOhx7HHwcFQLDAAAWRyISzSFiciYhI4cCwwAAIXdmcxsCxgAAHTRhchUBxAAAEDMgc8YfswDACOjHAAAdNcIAABOK+r0JAAABAOcRLwBZAAEAkQATALkCKAA=")
\ No newline at end of file
diff --git a/api/search.index/5364c4af94.js b/api/search.index/5364c4af94.js
deleted file mode 100644
index 7fc9af85d..000000000
--- a/api/search.index/5364c4af94.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcgAACIiJSI7IkIiQcIAABUhIiFkIW8hBQLAAAAcqSIdgCJhaAUCwAAAGYwiF6khbnIHHYL9HwAexgAAIkHHAAAiRMcAACJL1AAAIrjLAAAicCsCwQAAIgJvcg==")
\ No newline at end of file
diff --git a/api/search.index/538a2017fc.js b/api/search.index/538a2017fc.js
deleted file mode 100644
index 87ac1ba8e..000000000
--- a/api/search.index/538a2017fc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQIBwgAAG7p05g8MAAC1FgAAwx0AANAeAADzIQAA+iEAAPwhAABBAAAAFQHFAAAWZyFiPx0FAsEAABJAHRI+HWJ0FQHMAAAWDCJiJiAzAAPOAAAiVmV0d/aUEwAALAEWAAEA7wdOBQUCwAAAxo8gFGkcY24FAsEAACI9HZwe4OgcZG1blsEAAB3MBQLBAAAWxx8RAxxibysCwgAAIf9hchUBwwAAqGgidwIhRcLCgiAAADT7IPwg/iGqjiIlGyBCIRUcIPMb9BsGHQcdK4bDAAAemwUDwQAApHQfMfIbBR0OISRyH6wfZWx4FQLDAAAfpCKi3B5jcpscFQHEAAASQx1y3BrzAAFmAdAUAAD7AmRuAYL9CQAYxgAAIkHUAAAiuMEAACFvxwAAIkIrAsEAACICb3IhxwAABCITImMEA8UAACAlYmVwAd8aAAAxwgAAhR2GHQwh+wJjdBuJyAAAIHplgcUAABWeIece6B7 [...]
\ No newline at end of file
diff --git a/api/search.index/5399f7a451.js b/api/search.index/5399f7a451.js
new file mode 100644
index 000000000..07a9b7151
--- /dev/null
+++ b/api/search.index/5399f7a451.js
@@ -0,0 +1 @@
+rn_("FQHKAAAW8yF2HCIFhsAAACWvHHIiJbAcDiAVgcUAABysIqEhI4ECyQAAIbVhczWEwAAAo1ccqxysHKIdUcIAAKcTqBO1GkUgOCIlwcCACAAA4mAdU90aPRw+HDchXiLk+R5JHTwhBYXAAAAbciEYECGhxAAAEiETAQLgAAAatG1z5HsQAAD9FAAAth0AAKgfAADWHwAABRAQBQLAAAAVrhyiVRx1eQUCwAAAFC4gG6wiY3X3PwD+wECoO+AAABBhOzAAAAEAACoAEAAXDAIAcQ4SAIITAwDIFgEAghwAACEdAQBuHQEA7R4BADAgAABpIAAA+CAAAKEhAACvIQAAtSEAAMYhAAA6IgAA")
\ No newline at end of file
diff --git a/api/search.index/541beeeff3.js b/api/search.index/541beeeff3.js
deleted file mode 100644
index 8fd1d2c92..000000000
--- a/api/search.index/541beeeff3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcUAANocCCAhwQAAvhMrHQFG4toeAACUIQAA2yEAABCQAUXh0xwAAHwgAABgdwEC/SQBA8QAAByT5/cLAAAYDgAAqBYAAI0aAADUGwAAzh8AAHggAAAFIgAAEQAhEA==")
\ No newline at end of file
diff --git a/api/search.index/542e55ad4b.js b/api/search.index/542e55ad4b.js
new file mode 100644
index 000000000..19fb046b8
--- /dev/null
+++ b/api/search.index/542e55ad4b.js
@@ -0,0 +1 @@
+rn_("FQHRAAAWyiJksyIjhALLAAAid2Z3NQHFAAAWZCFiOh0QHxEfRQLAAAAXGSIVASJmdFsd9h5mIE8hBQLAAAAkOR0PHxZzIm9yoc8AAH4iFYLGAAAUFCHAHXcFAcILyMIAAB1wxAAAIknkZxAAAMETAAALHQAAVCAAAEohAAACECAlhMIAABGDIeIfWCD7AmVsWwPHAAAiOmlydQ==")
\ No newline at end of file
diff --git a/api/search.index/54a6e03bc4.js b/api/search.index/54a6e03bc4.js
new file mode 100644
index 000000000..9739acdc5
--- /dev/null
+++ b/api/search.index/54a6e03bc4.js
@@ -0,0 +1 @@
+rn_("AULiTSAAAHkhAAATIgAAYgArAsAAAB0laXQVAsMAABZHIhLNIWJyJiEjiALDAAAhd2ZzFQHEAAAQMyBzxh/zAwJmcOItHAAA0hwAAIsfAAAQAC8B/QBIScUAAB2qwwAAGtrEAAAe9A==")
\ No newline at end of file
diff --git a/api/search.index/54bd6536fb.js b/api/search.index/54bd6536fb.js
new file mode 100644
index 000000000..cff348737
--- /dev/null
+++ b/api/search.index/54bd6536fb.js
@@ -0,0 +1 @@
+rn_("odYAAJAiMcYAAKofSyDbIQUCwAAAEjkhEfkhdHrzAIQBUyEAADHBAADaH9sfJSLzAgJpc+R6HQAAzB4AADEgAACBIAAAhyEAACEBACUBzAAAFr4iZDEilyIVAcIAABKyIm2bIiOHAscAACK4YWvnAQL9DRQAyQAAIqXhYxkAALYhAAAQJQHCAAAXpyFt5xv1HEMB/QJFAMIAAB6NxwAAIBXIAAAgeINgIAAAcwD9EFEA4AAADijhAA8AAC4PAAABBQLBAAAYbiATPiBhdEHAAADWC7oTxRO3HgFCOzAAAAEAAPQAAQChFfQAG4nBAAAdMAFAOzAAAAEAAPUAAgAiDAAAYQ/0ABsCwQAAIWpkdGcDAP0gYRbDAAAfy8QAAB7KxQAAIlc6MAAAAQAAAAAAJAAQAAAAJgWYCZkJuQ5oEHQQvRO+E8QTwRS+Fn4a4xr2GrwbDhwPHKkcqhyUHZUdsR2/HXofsh/KHz4gbiB [...]
\ No newline at end of file
diff --git a/api/search.index/54cb2e4fb7.js b/api/search.index/54cb2e4fb7.js
deleted file mode 100644
index 9cf712897..000000000
--- a/api/search.index/54cb2e4fb7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHRAAAWuiJkjSIVAdgAABbJImS5IhUB0AAAFsAiZJ8iFQHIAAAWsyJkeCIVAccAABavImRuIvODAnJzFQHMAAAWsiJkdyIVAcQAABa3ImSIIhOJAsMAACKJY2wVAcgAABauImRtIhUBygAAFr8iZJgiFQHKAAAWviJklyL7hRUBxgAAFpwiZFEi84EDZW1u+wJkb/OGwAYoFQHIAAAWPiJkfSAVAcwAABa8ImSVIhOJAsMAACIjZGsVAckAABaaImRPIhOEwAhMyQAAIlzLAAAia8cAACI9GwLTAAAilGZsFQHaAAAWyCJksSL7g2dNAP4AH6QdVYgtDjrLAAAhxUXq+TNMywAAIcfCAAAco25fEGBhAXMgAAAFAsEAABR7IhWGInFzIwIDxAAAIZ3CAAAepmFydjswAAABAAAmABEAshYAAKMaDQCwHAMAox0BAM0dAACNHgAAxB4AAOMeAwDzHgAAkR8BAPUfAQA [...]
\ No newline at end of file
diff --git a/api/search.index/5502b48a1a.js b/api/search.index/5502b48a1a.js
new file mode 100644
index 000000000..202907c48
--- /dev/null
+++ b/api/search.index/5502b48a1a.js
@@ -0,0 +1 @@
+rn_("BYPBAAAS1BwVAB8Fg8EAABLTHBX/Hmv8DgDgAAAQhgEAkMQAABvp5f4LAABADgAA2RsAADMgAABMIAAALyEAAAkQAAUCwQAAIG0QRR0T9SFmc6HGAAD6HEHDAADEHRwgGSGUIQUCwQAAFUwgFjwhZm41AcAAABQLInD2H0AhICIFicAAABdCIhFwIaHEAADrIQWJxAAAEo0iEYciI4UC4AAAIgpkZgUCxAAAFnwiE2Aib3QbAs0AACKgaG9nNgHAD+vEAAAfccIAACGZ1wAAIsfDAAAh8eeOEAAAKB0AAHYfAAB/HwAALCEAAIMhAACsIQAASyIAACAQAAAhzgAAYiKoIiHEAAAUIXUhUwD9EAAHwQAAIc7EAAAhOzowAAABAAAAAABCABAAAADMDs0Ozg7PDtAO0Q7SDtMO1A7VDtYO1w7YDtkO2g7bDtwO3Q7eDt8O4A7hDuIO4w7kDuUO5g7nDugO/xsqHCscLBy [...]
\ No newline at end of file
diff --git a/api/search.index/556d39adc4.js b/api/search.index/556d39adc4.js
deleted file mode 100644
index 28f128c8b..000000000
--- a/api/search.index/556d39adc4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("dQPGAAAxwBzBHLweElYdolcdaWxy9Rp+HH8cLx0wHXEhciGhxQAAwRYlAc0AABCGIHMtIHQhFQHRAAAWuiJkjSIVAdgAABbJImS5IvOHAnJ2JQLHAAAmhSCJIRLSHWJy/xskHSHHAAD+G1Mg1wcA/gAJpAzLAAAfwQGmHgAABQLBAAAUeyIVhiJxc4MA/kACkAjEAAAhncUAACKRxQAAIGbCAAAepjswAAABAAArABUALg8BALIWAACjGg0AsBwDAKMdAQDNHQAAgB4AAI0eAADEHgAA4x4DAPMeAACRHwEA9R8BAAEgAABAIAAAfiAAAHYhAAB/IQAA0iEAANghAAA8IgAAxQLAAAAnPiEeIhBxG2ZzgRohxQAA2hwIICHBAAC+EysdAUbi2h4AAJQhAADbIQAAEJABReHTHAAAfCAAAGB3AQH9JAEDxAAAHJPn9wsAABgOAACoFgAAjRoAANQbAADOHwAAeCAAAAU [...]
\ No newline at end of file
diff --git a/api/search.index/55848c9daf.js b/api/search.index/55848c9daf.js
new file mode 100644
index 000000000..7a5ae19bb
--- /dev/null
+++ b/api/search.index/55848c9daf.js
@@ -0,0 +1 @@
+rn_("McMAAP4bqx1GIqWEwgAAEQsinw4xxwAA4BvhG14dNYTGAAARyB/GGscaBBwBRjswAAABAAC1AAIAFB9aAJsgWgA1AcsAABSSImYoIsYixyL7AnFyYcQAAIITgxOEE4UTyBbJFvcDAP0U4AzEAAAb6TowAAABAAAAAAAgABAAAAD+C0AOQQ5CDkMORA5FDkYORw5IDkkO4RC0Grwa2RvaGxkcGhwbHDkcOhxdHHscfBz2HzMgTCBaIPcgLyFAISAirCI=")
\ No newline at end of file
diff --git a/api/search.index/55882d0e3a.js b/api/search.index/55882d0e3a.js
deleted file mode 100644
index 8e589003a..000000000
--- a/api/search.index/55882d0e3a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQPGAAARTiIWgyIYkyJpc3QjhgLDAAAhxGNuFQHPAAAWuyJkkiIVAckAABaRImQ8IhUBzAAAFrUiZIIiFQHMAAAWtCJkgSL7hfOEwACG+5g=")
\ No newline at end of file
diff --git a/api/search.index/55a7daa610.js b/api/search.index/55a7daa610.js
deleted file mode 100644
index 805b766d6..000000000
--- a/api/search.index/55a7daa610.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQQBxQAAICRyiUccAAAFAssAABR7IhWGInFzEwQCxQAAIZFwcuECHwAAlR8AAIghyAAAqh/mIfMBwBDAOzAAAAEAAPcAAwCfFfQAyR4AAFQgAQA=")
\ No newline at end of file
diff --git a/api/search.index/55ae141626.js b/api/search.index/55ae141626.js
new file mode 100644
index 000000000..f14566e33
--- /dev/null
+++ b/api/search.index/55ae141626.js
@@ -0,0 +1 @@
+rn_("BQLAAAAnBSIUIhMDImVwJQHPAAAWzCJkriLJIiUBxwAAGGUiZ2MiqSIlAcYAABbDImRcIqIi84IDZWxw84ODdQLBAAAXFSEREiBpduUb8BzxHB4hsiGzIfQhJQLBAACmOyIlzx+NIWVzvBS4HCHAAACkGjwdOwPGAAAg/GRvdgEAAswAACI40gAAInhhcAHCFgAAGwLCAAAcWWRtFQHGAAAgfSDEIXIfIPMDAXAB3xoAABuJwwAAHZYVAcMAABbLImS7IvMCiAG2GgAAdwcA/TVBAsYAAB/25oQOAAAtDwAAQA8AAE0PAAB9HAAArR0AANoeAAAAIAAANYTAAAATSCEgISEhtCEBAgHVAAAikG0BAA8AAEWBwAAAWPwf/R/+HyMhYyHcHMQfCiBsITHAAADiHuMezSE1AcYAAEAiICMgBSEJIXO3H8AfZSAFhsEAABBeHDK7HLwc+SD7/SkABPsCZXlhwwAAfhx/HIk [...]
\ No newline at end of file
diff --git a/api/search.index/560648e8e8.js b/api/search.index/560648e8e8.js
new file mode 100644
index 000000000..268a9d4cf
--- /dev/null
+++ b/api/search.index/560648e8e8.js
@@ -0,0 +1 @@
+rn_("FQHCAACiIx1z9BQ1AcAAACTHH5YgY5Eeux7hHyMBAsYAACKkbXPhgRAAAJkhAAAQBYnAAAAXQiIRcCGhxAAA6yEFicQAABKNIhGHIiOFAuAAACIKZGYFAsQAABZ8IhNgIm90GwLNAAAioGhvNwMBwA5rwgAAIZnXAAAix8MAACHxxAAAIgvSrCEAAJ8jAv0QAQPDAAAhzsEAAB1F4AAAIDP52xoAAAMAdQGfACYArgJmAAEAywH7AmVs+wJpcg==")
\ No newline at end of file
diff --git a/api/search.index/56692742f3.js b/api/search.index/56692742f3.js
new file mode 100644
index 000000000..01497025d
--- /dev/null
+++ b/api/search.index/56692742f3.js
@@ -0,0 +1 @@
+rn_("BQPGAAASKiAZJiIaRSJhZXOlkMAAACK7E9QUHw0VAcQAABZoIWY+HRWQwwAAFIQh8xvzAojycxAAAGQE+wNob3I1AcEAABgsIWKAEMgdCyBVAsIAAHHEHMUcxhzHHOseox+1HyXEH2whaXP8H/0f/h8jIWMhYcQAABEdEh0THewepB9YIiHDAAD7H0UiMcQAAE4dTx1XISHGAAC5Ir8i8wIBZOXPHgAAzR8AABciAAAzIgAAiiIAAJgiAAARAQD7AmRuNQHFAAAWDiJiTB1NHSgg+4mXAQH9BCkEwAAAGrfDAAAii+lUDwAAzBoAAAEbAAAnHAAAsRwAANEdAADfHQAAzh4AALEfAABDIAAAABIAIAFhwwAAnBadFp4Wnxb8Gv0aFQHKAACkTiJtMiIlAcYAAKTrIW2sIUsiM4HACEjMAAAiKFMBlsEAACKs8s4aAAA7AVsDwAAAD0tnbm8VAcAAABLjGnlQDg8IwIL [...]
\ No newline at end of file
diff --git a/api/search.index/5680ee9af7.js b/api/search.index/5680ee9af7.js
new file mode 100644
index 000000000..6bf43c847
--- /dev/null
+++ b/api/search.index/5680ee9af7.js
@@ -0,0 +1 @@
+rn_("FYLBAACmgCJ5EKHEAADAIfMAAW3jzBAAABQdAAApHQAAfSEAAAMRMcAAALkWuhbmGwUCxwAAF3MiFUkiZnQhwgAAEB2LHvMEA2FkcjswAAABAAB9AQYAqxMCAAUVZADRGgEABhtdABQfWgCbIFoA2/0NIADgAAAcmA==")
\ No newline at end of file
diff --git a/api/search.index/56b611c5b6.js b/api/search.index/56b611c5b6.js
deleted file mode 100644
index 35a0deee1..000000000
--- a/api/search.index/56b611c5b6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("YcUAALodAB8BH4QgTiFPISHFAABYInQiBQPAAAAXqyGvjiETtR5pcnkBRjswAAABAAC1AAIAEh9aAJkgWgA1AcsAABSQImYmIsQixSL7AnFyGwLHAAAfxmVuFQHBAAA09R72HkggY8gWFQHOAAAWySJkuSLzgQJwdyUBwgAAFsoiZKwixyIxwwAAuCG5IWYiFQHBAACkTCJtMCIzhgPJAAAidml0dvsCcnQbAscAACB+YXIFAsAAABOxHRh2IHJ1BQLAAAAafiEQkR5lc1UBwgAAF6Uhbdsb5RvsG+0b8xxViMMAABe0H6AT7BTtFDIdsh0bwAKExgAAIBPFAAAgdTUBwAAAJMUflCBjjx65Ht8fI4ECxgAAIqJtcwWJwAAAF0AiEW4hocQAAOkhBYnEAAASiyIRhSIjhQLgAAAiCGRmBQLEAAAWeiITXiJvdBsCzQAAIp5obzcDAcAOa8IAACGX1wAAIsXDAAAh78Q [...]
\ No newline at end of file
diff --git a/api/search.index/56e973b4a5.js b/api/search.index/56e973b4a5.js
deleted file mode 100644
index 370fe000d..000000000
--- a/api/search.index/56e973b4a5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQPAAAAW+SG13R0R+SAzZXF+IUHIAAAiIiUiOyJCIkHCAAAVISIhZCFvIQUCwAAAHKkiHYAiYWgHHIL9HwAexgAAIkHHAAAiRMcAACJL1AAAIrjJAAAijMsAACJwKwLBAAAiAm9yIcUAAJQcqCEFAsAAAByvHyDBHksiY2QhxwAABCITIgUCwQAAHJAhE2YdbW4BRvo0HQAAAQB4AhAAWgAOAE0ApgCBAHMAdy4A/daJE8IAACE8wQAAIPjCAAAhPccAACHr7qUOAADoDgAApxYAALkWAADSGgAA2hoAAN8aAADpGgAAORwAAJwcAABKHQAAVh0AAMsdAACGHgAAJiAAABYAAAABEAEA")
\ No newline at end of file
diff --git a/api/search.index/57872d76ba.js b/api/search.index/57872d76ba.js
new file mode 100644
index 000000000..9f70b5ce2
--- /dev/null
+++ b/api/search.index/57872d76ba.js
@@ -0,0 +1 @@
+rn_("JQHHAAAWkyJkQiA+IiHBAAC6Dpkb+wJsbQEBAsYAAB3IxQAAIfNhduX6HAAArh0AAKAeAADlHwAAQiEAABwiAAAREREhwAAADAyMGqHIAABqIgEEAsYAACFn6AAAHpRyc+H+HAAA2B8AAIEhxgAANyFeIvMBwgBC8wIcAACgA2IB+wJtbvuT")
\ No newline at end of file
diff --git a/api/search.index/57999c69f5.js b/api/search.index/57999c69f5.js
new file mode 100644
index 000000000..6006f8400
--- /dev/null
+++ b/api/search.index/57999c69f5.js
@@ -0,0 +1 @@
+rn_("QcMAAJggmSCcIcIh8wABbOoeDgAAcBAAAHoQAACSEwAAnRMAAM0aAAC5HAAA1RwAAGgdAAB+IAAAIyIAAJAAABYAAA==")
\ No newline at end of file
diff --git a/api/search.index/57acc90c7d.js b/api/search.index/57acc90c7d.js
new file mode 100644
index 000000000..e112e806c
--- /dev/null
+++ b/api/search.index/57acc90c7d.js
@@ -0,0 +1 @@
+rn_("FQHBAAAWvSJklCITjALDAAAiYW1vBQLFAAAUDyAVdiBxc/uJpQHJAAAU+CFmnyIlAckAABaTImRCID4iJQHMAAAWtyJk9yGEIiUBzAAAFrYiZPYhgyL7hQUCwAAAFysiMqkcqhzKH295IcYAAOQeMCHzAgJsdOKjEwAA8BQAAC8cAAATADWBwQAAI+0b2x7DFMQUciEhxgAAsSLFIucPAP0cMQ7HAAAhksIAAB6z/BwOAADTDAEA7wDPBREAiwAmAA4AAQAnAAQA")
\ No newline at end of file
diff --git a/api/search.index/57af0064a4.js b/api/search.index/57af0064a4.js
deleted file mode 100644
index d4edfd327..000000000
--- a/api/search.index/57af0064a4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("YcAAAHwcfRyHH4gf7h/vHyHDAAAAHKAfIcIAAPYaxx4hwQAAfhPEFvMC/QAlAujTFAAAQhwAAPUeAADFHwAASCAAAJQgAAD0IAAAOCEAAMchAAAEEAAAAA==")
\ No newline at end of file
diff --git a/api/search.index/57b5d909c8.js b/api/search.index/57b5d909c8.js
deleted file mode 100644
index ef8875953..000000000
--- a/api/search.index/57b5d909c8.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcAAAFsc9SChxAAAIiBjAMAIQsMAACH27n4TAAC+EwAAbxUAAMQWAACiGgAAvhsAACsdAAAtHQAAOh0AAJ8fAADGHwAAYSAAAJMgAABOIgAAnSIAAAAADQAAAAAQ")
\ No newline at end of file
diff --git a/api/search.index/57dcb86383.js b/api/search.index/57dcb86383.js
new file mode 100644
index 000000000..2258b27ee
--- /dev/null
+++ b/api/search.index/57dcb86383.js
@@ -0,0 +1 @@
+rn_("BQLAAACoQyAhdB+uH2FyocMAAKgbBQLAAAAWcSAa3CFob/uJocgAAKMeIcUAAIwfLSIhxgAAZRsmIucFAP6ABKINwgAAFOTMAAAhRcUAACAJ5XMJAACpDgAAoRMAAIQcAABOHQAAVyEAABEAEDUBywAAFp0iZP8gACFSIhsCwwAAE4xudCUByAAAFrYiZPYhgyJFAcUAABZuImSJHYodix3IIfOBAmZ0BQLAAAAVfCFEsRzRHc4esR9jc/MAgoI4BgAAFQHAAAASfRptPg6lgcAAABVlIW8fI4YCwQAAIPdpcysCwAAAGnxpbksDywAAIYDJAAAhO2Rvc/OBAmV5q/0QQQHDAAAWwsEAAA4/AUDkNQ4AAGAcAACAHwAAKyAAAJchAACIgAAVAcAAABQ6IWNZIPMDAXMBxR8AABMCAscAACD2ZnIBbBAAAPMCAmlzAXcQAACh0AAAkCFDAcADgMMAAB95zAAAIHTh0wk [...]
\ No newline at end of file
diff --git a/api/search.index/5802578e85.js b/api/search.index/5802578e85.js
deleted file mode 100644
index 36f166ff0..000000000
--- a/api/search.index/5802578e85.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocUAABUgBYbAAAAkwh9qIRKWFgFB5MIcAADpHgAAoR8AALMfAACjIgAAMAAAockAANQh8wADZ2lz4zYPAAD6HwAAISEAAGEhAAACACsCygAAIkp0eaMA/RgQAsgAACGTxQAAIqPzkgkAAGgL8AY=")
\ No newline at end of file
diff --git a/api/search.index/58115f7fbf.js b/api/search.index/58115f7fbf.js
deleted file mode 100644
index dd12caef3..000000000
--- a/api/search.index/58115f7fbf.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHCAACiIR1z8hQ1AcAAACTFH5QgY48euR7fHyMBAsYAACKibXPhfxAAAJchAAAQBYnAAAAXQCIRbiGhxAAA6SEFicQAABKLIhGFIiOFAuAAACIIZGYFAsQAABZ6IhNeIm90GwLNAAAinmhvNwMBwA5rwgAAIZfXAAAixcMAACHvxAAAIgnSqiEAAJ8jAv0QAQPDAAAhzMEAAB1D4AAAIDH52RoAAAMAdQGfACYArgJmAAEAywH7AmVs+wJpcg==")
\ No newline at end of file
diff --git a/api/search.index/5852e17b92.js b/api/search.index/5852e17b92.js
new file mode 100644
index 000000000..4b008eddd
--- /dev/null
+++ b/api/search.index/5852e17b92.js
@@ -0,0 +1 @@
+rn_("FQHFAAAWaSFiQR0FAsEAABJCHRJAHWJ08wABdOKWEwAA2BQAAMgcAAABACHFAAA/HZ4eRcLCgiAAADT9IP4gACKqkCIlHSBEIRUeIPUb9hsIHQkdK4bDAAAenTHDAAD0GwcdECEVAsQAAB+mIqLeHmNynRwFicAAADOHHYgdDiEZfCD3HAD9NJgTxgAAHuDCAAAdCuJ1EAAAtxAAAAMcAAAQAA==")
\ No newline at end of file
diff --git a/api/search.index/58a7393f71.js b/api/search.index/58a7393f71.js
deleted file mode 100644
index ca649161a..000000000
--- a/api/search.index/58a7393f71.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHAAAASexptPA4VAcEAAOQaHHLQCaWBwAAAFWMhbR8jhgLBAAAg9WlzKwLAAAAaemlupQHDAAAwUBz9H/4fc/AexQLAAAAUoCEbfiFibdIQIcQAALoUthx/Af0MUALJAAAhObv9EABGywAAIhA=")
\ No newline at end of file
diff --git a/api/search.index/58e206cabf.js b/api/search.index/58e206cabf.js
new file mode 100644
index 000000000..34f1b887d
--- /dev/null
+++ b/api/search.index/58e206cabf.js
@@ -0,0 +1 @@
+rn_("YcAAAH4cfxyJH4of8B/xHyHDAAACHKIfIcIAAPgayR4hwQAAgBPGFvMC/QAlAujVFAAARBwAAPceAADHHwAASiAAAJYgAAD2IAAAOiEAAMkhAAAEEAAAAA==")
\ No newline at end of file
diff --git a/api/search.index/5913754675.js b/api/search.index/5913754675.js
deleted file mode 100644
index 9f6b3abfe..000000000
--- a/api/search.index/5913754675.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHFAAAV/CFyACAlAcMAABauImRnHW0i+4ZBxwAAvx+OIY8hDiIBBgLEAAAiJ8gAACJiYXLmmRwAAHwdAADBHwAAaCAAACYhAAC6IQAAxSEAAAYAMgAhxgAAYCGaIqMAwQaAywAAIizBAAATjuVnGwAANx0AAA0fAAAqIgAATyIAAJQiAAAwAAAVAcsAAKhoIncCIfsCbHRzAP0hSADCAAAWpOSzEwAA6hQAAJgVAAA9IAAAlSAAAABgAA==")
\ No newline at end of file
diff --git a/api/search.index/595614cea9.js b/api/search.index/595614cea9.js
new file mode 100644
index 000000000..4a8bd46a1
--- /dev/null
+++ b/api/search.index/595614cea9.js
@@ -0,0 +1 @@
+rn_("QcMAAA4cDxy/HXwgscoAAHkhFQLBAAAfpiKi3h5jcp0cscUAAGodMcIAAPgUvR++H/MA/QBBB+H4DgAAdR8AADA=")
\ No newline at end of file
diff --git a/api/search.index/595b49116e.js b/api/search.index/595b49116e.js
deleted file mode 100644
index af14161e7..000000000
--- a/api/search.index/595b49116e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAVMh0iwxa9HmRmG4rGAAAgfiHCAAAGIIwi8wKQ6mkQAACFEAAA1BoAAOAaAAD1GwAA1B4AAHAfAACnHwAA3h8AAAMiAAASIgAABQABEAEQGwLgAAAhbmlzJQHCAAAWyiJkrCLHIqHCAAD4HDHDAAC4IbkhZiIlAsMAABZFIhLLIWJyMCAkIRUBwQAApEwibTAiNQHEAAAQLSFzhyCIIHUh9wAE/gBIAAvJAAAidgFAIgAA84ECaW77AnJ0+wNhb3I=")
\ No newline at end of file
diff --git a/api/search.index/5992ef4ed1.js b/api/search.index/5992ef4ed1.js
deleted file mode 100644
index 4adb54773..000000000
--- a/api/search.index/5992ef4ed1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUuKViEAABsDwgAAIY3HAAAhIG9yeQUCwAAAw40cEosdZWwFAsAAABbFHhPaG3J1FYTGAAARnx8FIbHCAAC+HhUCxAAAFlUhFFYiY3TKGhsC4AAAFqZzdKHGAAC0HUc/AP5ERzgCzwAAIiDOAAAiosUAACLK0qwiAAAb")
\ No newline at end of file
diff --git a/api/search.index/59a3010d86.js b/api/search.index/59a3010d86.js
new file mode 100644
index 000000000..8164ea333
--- /dev/null
+++ b/api/search.index/59a3010d86.js
@@ -0,0 +1 @@
+rn_("IcUAANwcCiAhwQAAwBMtHQFG4tweAACWIQAA3SEAABCQAUXh1RwAAH4gAABgdwEC/SQBA8QAAByV5/kLAAAaDgAAqhYAAI8aAADWGwAA0B8AAHogAAAHIgAAEQAhEA==")
\ No newline at end of file
diff --git a/api/search.index/59cef0762e.js b/api/search.index/59cef0762e.js
new file mode 100644
index 000000000..d42a6d065
--- /dev/null
+++ b/api/search.index/59cef0762e.js
@@ -0,0 +1 @@
+rn_("JQHFAAAY9CFjkB+FIjUBxAAAFqciZIUhhiFnIiuJwgAAHVRjAAPEAAAhZWF0deSuEwAAaxUAAMsdAABvHwAAjh8AAAIRAKHGAAC9H1WCwAAAFbwf7BpSHVMduB+5H/sCZnQbisUAAB7vIcAAAF0c9yChxAAAJCBjAcAIQsMAACH45sAbAAChHwAAyB8AAGMgAACVIAAAUCIAAJ8iAADQAAAQNQHEAAAWnSJk/yAAIVIiFxkA/SeJB8IAAB2pwwAAIcnEAAAfj8EAABrryAAAIdTHAAAiled8EAAA3BAAAMYaAAAEHAAADh8AAAchAADVIQAAiSIAAAQQAAA=")
\ No newline at end of file
diff --git a/api/search.index/5a47474d3e.js b/api/search.index/5a47474d3e.js
new file mode 100644
index 000000000..b4c183d9d
--- /dev/null
+++ b/api/search.index/5a47474d3e.js
@@ -0,0 +1 @@
+rn_("pQLAAAAVxh6gwxplc5YWMcUAAB4hsiGzIfsCanAFjMAAABSjIRx2IhsCxAAAHbRjZPuKpQHCAAAW8yF2HCIxzAAAViJ0InUiOwPhAAAiamlucyOBAsEAACHcYXT7AmFy")
\ No newline at end of file
diff --git a/api/search.index/5a47db67ab.js b/api/search.index/5a47db67ab.js
deleted file mode 100644
index 7c2d60a04..000000000
--- a/api/search.index/5a47db67ab.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUE7MAAAAQAAGAECAKIWAQBjGRYBFQHGAAAWySJkuSLzAYEBKw8AADMAxAJU4AAAE53GAAAiH8cAAB+vAccLAAA=")
\ No newline at end of file
diff --git a/api/search.index/5a5aa04912.js b/api/search.index/5a5aa04912.js
deleted file mode 100644
index 75d0a34d2..000000000
--- a/api/search.index/5a5aa04912.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHFAAAY8iFjjh+DIjUBxAAAFqUiZIMhhCFlIgUCwAAAElIdJqEcox5icvuJYwADxAAAIWNhdHXkrBMAAGkVAADJHQAAbR8AAIwfAAACEQChxgAAux9VgsAAABW6H+oaUB1RHbYftx/7AmZ0G4rFAAAe7QWRwAAAIQoMihoiuA6XGxUBwAAAFmQdZPULG4zAAAAa6SHAAADYCdEUIcAAAFsc9SChxAAAIiBjAMAIQsMAACH25r4bAACfHwAAxh8AAGEgAACTIAAATiIAAJ0iAADQAAAQW8AEBsUAACFpBQLBAAATjR8ivRyxH3J1FZDAAAAUPRzXCRvEADDKAAAiEcIAABB1FQHBAAAWuyJkkiITiQLDAAAiX21vNQHDAAAWmyJk/SD+IFAia8ARAcEAABqJAQD9N6lHQuw5JwHCAAAdp8MAACHHUeoHXAxHrKtqHHOViBDxGszShN0+ihNCjMgAACHSPsJkn1oooVK [...]
\ No newline at end of file
diff --git a/api/search.index/5abde0940c.js b/api/search.index/5abde0940c.js
deleted file mode 100644
index faf0a3eee..000000000
--- a/api/search.index/5abde0940c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQLDAAAVPCAWVSJ0d2wgRCGlwMQJYAAAFqMfEzYdFdAeFLwdARsVAsMAABYKIBYLIGJvyBpbA80AACGNYWN3IcMAAPgU7R77g8HBAACBHgFBOzAAAAEAAJ8AAgDDDgAA4hCeAPMAkoLHDgAAAUE7MAAAAQAA9gACAIcTAAC/F/UAK5TAAAAQYSUBwgAAFq8iZKwhbiITgQLDAAAiYm1uAQEBwwAAHFFm46YbAAAaHAAAOx0AAO4hAAAVASUByAAAFsAiZFcinyKhzwAAfiLzhAJmcxUBxAAAoDccc6MbGwLBAAAWmWJyFQHAAAAWySJkuSL7AmRyFQHLAAAQzx5yux0FAsAAAEfaHdsdJyB3IBsJIG5yAQD9c7kHRGVmbcEc8QYm+XfTrDnqyAAAHbgE1+6sZW/jg3dYZiSF1Sx5Yt3fdmh63Kqj0AAAIilTKQsbrzrtr8uFBQMf9L87MAAAAQAA+QAEAO4JAQDyCwA [...]
\ No newline at end of file
diff --git a/api/search.index/5ac64753d9.js b/api/search.index/5ac64753d9.js
new file mode 100644
index 000000000..8f8329e8c
--- /dev/null
+++ b/api/search.index/5ac64753d9.js
@@ -0,0 +1 @@
+rn_("pQLBAAAVxh6gwxplc5YWBYzAAAAUoyEcdiIbAsQAAB20Y2T7iqUBwgAAFvMhdhwiGwLhAAAiam5zI4ECwQAAIdxhdPsCYXI=")
\ No newline at end of file
diff --git a/api/search.index/5b145af890.js b/api/search.index/5b145af890.js
deleted file mode 100644
index 490ba2a2c..000000000
--- a/api/search.index/5b145af890.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcEAAG8QmxDFAsMAACc+IR4iEHEbZnOBGmUDwAAAFg8gEwsfExQhYmlqzRoDGyAgISADIQchpYLDAAAhACIgIi0i8wECbHP5nxYAAAEAtgI8AzAC8wAEAAUApQD7A2FmdPMAhOG+FgAAQR0AABExygAAyh7LHi8g+wJjdA==")
\ No newline at end of file
diff --git a/api/search.index/5b21545cac.js b/api/search.index/5b21545cac.js
deleted file mode 100644
index a944015cd..000000000
--- a/api/search.index/5b21545cac.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BZjAAADjGhzHOCAhzAAAYCKmIvMAAm9yAdAJAAAhxgAA0yGHIhUBwgAAFsYiZK0i8wABbQF5EwAABYrAAAChVx0YYiIBQeW+GgAAwBwAALweAADGHgAARCAAALUhAAARAAAVAcoAABa6ImSNIscGAf2DCQPEAAAiJ8IAAB0jwQAAHVY6MAAAAQAAAAAAIAAQAAAA9Rr3Gn4cfxyZHK0cLx0wHXwdfR1+HX8dgB2BHYIdhR7BHwcgYiBoIAYhJiEnISghKSFxIXIhiCG6IbshvCHFIXAiFQHCAAASsCJtmSIjhwLHAAAitmFrIwsCyQAAIqNhYwG0IQAAO/0IQITBAAAfkMcAACIRFf3AEQEQAAATnxqkrxYXpRwaYiDEC2cFAP0ScQTFAAAfx8EAABtwwAAAHAPjNw8AAMMUAABxGwAAbyAAABEA")
\ No newline at end of file
diff --git a/api/search.index/5b7400f445.js b/api/search.index/5b7400f445.js
new file mode 100644
index 000000000..080b6f680
--- /dev/null
+++ b/api/search.index/5b7400f445.js
@@ -0,0 +1 @@
+rn_("ockAAHMhIcEAAEYgtyEjBQPEAAAiKcgAACJkYWly6ZscAAB+HQAAhx4AAMMfAAAJIAAAaiAAAAghAAAoIQAAvCEAAMchAAAGAAADIGuHwgAAHF8=")
\ No newline at end of file
diff --git a/api/search.index/5bcbe63efc.js b/api/search.index/5bcbe63efc.js
deleted file mode 100644
index a4038357d..000000000
--- a/api/search.index/5bcbe63efc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAACoQSAhch+sH2FyocMAAKYbBQLAAAAWbyAa2iFob/uJocgAAKEeIcUAAIofKyIhxgAAYxskIucFAP6ABKINwgAAFOLMAAAhQ8UAACAH5XMJAACnDgAAnxMAAIIcAABMHQAAVSEAABEAEDUBywAAFpsiZP0g/iBQIhsCwwAAE4pudCUByAAAFrQiZPQhgSJFAcUAABZsImSHHYgdiR3GIfOBAmZ0BQLAAAAVeiFErxzPHcwerx9jc/MAgoI4BgAAFQHAAAASexptPA6lgcAAABVjIW0fI4YCwQAAIPVpcysCwAAAGnppbksDywAAIX7JAAAhOWRvc/OBAmV5q/0QQQHDAAAWwMEAAA49AUDkMw4AAF4cAAB+HwAAKSAAAJUhAACIgAAVAcAAABQ4IWNXIPMDAXMBwx8AABMCAscAACD0ZnIBahAAAPMCAmlzAXUQAACh0AAAjiFDAcADgMMAAB93zAAAIHLh0Qk [...]
\ No newline at end of file
diff --git a/api/search.index/5bddd2c851.js b/api/search.index/5bddd2c851.js
new file mode 100644
index 000000000..975c8b1f6
--- /dev/null
+++ b/api/search.index/5bddd2c851.js
@@ -0,0 +1 @@
+rn_("dQHFAAAY6SFn5hrnGuga6RpaHFscXBwbAuAAABrrY2dFwsGCIAAANP0g/iAAIqqQIiUdIEQhFR4g9Rv2GwgdCR0jAALFAAAdZmRzAfcLAAAxxAAAnR6MHy0i+44=")
\ No newline at end of file
diff --git a/api/search.index/5bfc6d5990.js b/api/search.index/5bfc6d5990.js
deleted file mode 100644
index 370b6fcdd..000000000
--- a/api/search.index/5bfc6d5990.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcQAANod2x0nIHcgFQHRAAAWyCJksSIFicQAADjsITQiNSIUdiIbg8UAACAQYcIAAJIdkx2jIbghuSFmIgUCwAAAYg8dEB0RHeoeoh9WIhPzH2twZZDBAACpQSCnDqgOghxMHU0dVSFVA8EAALVoHbp3IUMMHA0cvR16IG9zdPYO9w74DvkOcx9bxABEwQAAIhQFkcQAABELHBLbHL8B/ZFAQOAAAAnWJQHIAAAWwyJkSCKoIiOBAsYAAB6AZW0hwwAAzR+LIQWMwAAAEsghGYciEwcCwgAAIhZmaeRHIQAAmyEAAPshAAAKIgAARiIAAAEBAPsCYXIxxQAAVCJyInMiNYTAAAATRiEeIR8hsiExwgAA4B7hHsshQcEAAPAf8R/yHw8iBQLAAAAlGyFFIhJFIXV58wH9AgED6KYcAACNHQAAlB8AADAgAAAkIQAAoiEAACgiAAA3IgAAayIAAAQAAAAA+wJlbBUBwgA [...]
\ No newline at end of file
diff --git a/api/search.index/5bfd1e5cc1.js b/api/search.index/5bfd1e5cc1.js
deleted file mode 100644
index 6d9f437f5..000000000
--- a/api/search.index/5bfd1e5cc1.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAAAZYSBzXg5VAcQAABdtIGzrISIiJSI7IkIiAUD4pRMAAAEADQeHAZgBHQFUAfMBAUA7MAAAAQAAIwACAKoWAABzGyIA8wDALASF8Q4AAA==")
\ No newline at end of file
diff --git a/api/search.index/5c2a29532b.js b/api/search.index/5c2a29532b.js
new file mode 100644
index 000000000..4c179d07d
--- /dev/null
+++ b/api/search.index/5c2a29532b.js
@@ -0,0 +1 @@
+rn_("pQHDAAAUyx9mXyIxwAAA8g5xG5AepQHGAAAUMSFmeyIVwMANAAAAFuIdGE8hFLse8Q6nAwH9LEAGywAAIiHOAAAiW/PcCQAAHgv1CQ==")
\ No newline at end of file
diff --git a/api/search.index/5c3c32db9b.js b/api/search.index/5c3c32db9b.js
new file mode 100644
index 000000000..2bd6ed58f
--- /dev/null
+++ b/api/search.index/5c3c32db9b.js
@@ -0,0 +1 @@
+rn_("FQHBAAAWvSJklCITggLDAAAiYW1vQcYAALQitSLCIsQiEwACwgAAGLdkcjowAAABAAAAAAAiABAAAAC/CcAJgxCEEIUQ4xDHFEodSx2yHQEfeR9NIE4gTyBQIFEgUiBTIC0hLiF5IXoheyGiIdIh0yETIiEiWSJdInkieiKhIqMiIcIAAKYO6Q5bwAFgxAAAHpBr/REBAcIAABvwzgAAIY4=")
\ No newline at end of file
diff --git a/api/search.index/5d8b04dd9d.js b/api/search.index/5d8b04dd9d.js
new file mode 100644
index 000000000..92453d561
--- /dev/null
+++ b/api/search.index/5d8b04dd9d.js
@@ -0,0 +1 @@
+rn_("BYnAAAAXQiIRcCEFicQAABKNIhGHIiOFAuAAACIKZGYFAsQAABZ8IhNgIm90GwLNAAAioGhvNwGGwA5pwgAAIZnXAAAix8MAACHxxAAAIgsFicAAABdBIhFvIQWJxAAAEowiEYYiI4UC4AAAIghkZgUCxAAAFnsiE18ib3QbAs0AACKfaG83AYbADmnCAAAhmNcAACLGwwAAIfDEAAAiCTvACgjIAAAggA==")
\ No newline at end of file
diff --git a/api/search.index/5e5eddc241.js b/api/search.index/5e5eddc241.js
deleted file mode 100644
index 8a41d8d0e..000000000
--- a/api/search.index/5e5eddc241.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHFAAAWGSFmnhwVAcIAABa6ImSNIvsCaXQJAtAAACIFzQAAIZRlbaUCxgAAFhghGOshYnecHHMAwILAwwAAG+7uBgwAAFMOAACzDgAAMA8AADkPAABUHQAAoB4AANoeAAAZIQAAViEAAGYhAABrIQAAlCEAANshAABkIgAAIwAxAQkBCQA=")
\ No newline at end of file
diff --git a/api/search.index/5ec9b00e9c.js b/api/search.index/5ec9b00e9c.js
deleted file mode 100644
index 075ebbecb..000000000
--- a/api/search.index/5ec9b00e9c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQLDAAATLh0VyB5ub0EiIcgAAF0dcSBBxgAAyRrEHQQgBSAlAcAAABaiHG1bDsge1wQA/gIENAPGAAAcBMQAACHaxQAAGsryLQUAAKQV")
\ No newline at end of file
diff --git a/api/search.index/5f3d75831a.js b/api/search.index/5f3d75831a.js
new file mode 100644
index 000000000..5524133b4
--- /dev/null
+++ b/api/search.index/5f3d75831a.js
@@ -0,0 +1 @@
+rn_("McAAADgFOQXDHSHGAAC5Ir8i8wABZOXPHgAAzR8AABciAAAzIgAAiiIAAJgiAAARAQATAALgAAAWpmNs+T0FAADsCAsAiQh+Bo4A/AA9AgEA8wACZXnhCwwAAFkOAAAB")
\ No newline at end of file
diff --git a/api/search.index/5f685a22d6.js b/api/search.index/5f685a22d6.js
new file mode 100644
index 000000000..33f814aa9
--- /dev/null
+++ b/api/search.index/5f685a22d6.js
@@ -0,0 +1 @@
+rn_("AUE7MAAAAQAALgAJABwMAgCNDgEAfhAAAHcVIgAeHQAAzh0AALkeAQDPHwAAjSEAAFUBwQAAFpMiZDAPMQ+CHkIgPiIFAsAAAFBKD+Qa5RpUHP8hF60dc3R7/RSgANEAACI6")
\ No newline at end of file
diff --git a/api/search.index/5f9e607596.js b/api/search.index/5f9e607596.js
deleted file mode 100644
index 1e5d9ac6b..000000000
--- a/api/search.index/5f9e607596.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHRAAAWuiJkjSIVAdgAABbJImS5IhUB0AAAFsAiZJ8iFQHIAAAWsyJkeCIVAccAABavImRuIvODAnJzFQHMAAAWsiJkdyIVAcQAABa3ImSIIhOJAsMAACKJY2wVAcgAABauImRtIhUBygAAFr8iZJgiFQHKAAAWviJklyL7hRUBxgAAFpwiZFEi84EDZW1u+wJkb/OGwAYoFQHIAAAWPiJkfSAVAcwAABa8ImSVIhOJAsMAACIjZGsVAckAABaaImRPIhOEwAhMyQAAIlzLAAAia8cAACI9GwLTAAAilGZsFQHaAAAWyCJksSL7g2dNAP4AH6QdVYgtDjrLAAAhxUXq+TNMywAAIcfCAAAco25fEGBhAXMgAAA1AsAAAKzUIUO6FswboRyjHmt3iBpoImkiocIAAPobZQHBAACkviFtEh0THRQdFR17IXwhFYLFAAAUcyHuHhsCwQAAH491eeME/QMBA8QAACGYwwA [...]
\ No newline at end of file
diff --git a/api/search.index/5fc7ad2700.js b/api/search.index/5fc7ad2700.js
new file mode 100644
index 000000000..9d2c6a998
--- /dev/null
+++ b/api/search.index/5fc7ad2700.js
@@ -0,0 +1 @@
+rn_("ocQAALkeJQLDAAAXDyIVzCFiZhoggiIVAcYAABX+IXICIEHHAADBH5AhkSEQIvMDAmZs47UTAACaFQAAPyAAAJcgAAAGADWBxQAAFY4h9RrRG9Ib+/0hgAQ=")
\ No newline at end of file
diff --git a/api/search.index/60218c27d9.js b/api/search.index/60218c27d9.js
new file mode 100644
index 000000000..923aa25df
--- /dev/null
+++ b/api/search.index/60218c27d9.js
@@ -0,0 +1 @@
+rn_("FQHGAAAgfSDEIXIfIEMBwARK0QAAIkzCAAAgW8cAAB8B58EJAAAMCgAA3xoAAPMcAACHHQAA/SAAAA4hAAAAIgAAAQARAA==")
\ No newline at end of file
diff --git a/api/search.index/606b13f11b.js b/api/search.index/606b13f11b.js
new file mode 100644
index 000000000..3dbbbad9e
--- /dev/null
+++ b/api/search.index/606b13f11b.js
@@ -0,0 +1 @@
+rn_("AUDhmRoAAJQeAAAIBQLBAAAUkyEltB9nIXFzBQLLAAAUfSIViCJxc6HEAABDHQFFiYAfAABnBwH9EaEDywAAIZfGAAAfs+eZEwAA2hQAAP4cAABxHQAABB8AAJcfAADMHwAA2B8AABOIiAE=")
\ No newline at end of file
diff --git a/api/search.index/6090928eeb.js b/api/search.index/6090928eeb.js
deleted file mode 100644
index 3c409d88d..000000000
--- a/api/search.index/6090928eeb.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUE7MAAAAQAALgAJABoMAgCLDgEAfBAAAHUVIgAcHQAAzB0AALceAQDNHwAAiyEAAFUBwQAAFpEiZC4PLw+AHkAgPCIFAsAAAFBID+Ia4xpSHP0hF6sdc3R7/RSgANEAACI4")
\ No newline at end of file
diff --git a/api/search.index/60bc7597f9.js b/api/search.index/60bc7597f9.js
new file mode 100644
index 000000000..0cfd0b71e
--- /dev/null
+++ b/api/search.index/60bc7597f9.js
@@ -0,0 +1 @@
+rn_("FYTDAAATaiGyH/MEAXTSoRwAAOsxwgAAPBzUHfEeFQHRAAAWyCJkryIhwgAAESFVIvsCYXIlAcAAABCAIXPcGjscAQUBxAAAIfxy4eEeAADnHwAABvOBAmNnIcEAAAsdVCAlhMIAABGDIeIfWCD7AmVsGwLHAAAiOmlyNQHNAAAWvyJkMyI0IpgiBQLDAAAT0SGgfR9uc/OBAmxtBQLEAABBhyAlIYshuSEV9SFlcvcLAsIL6cYAACHn0wAAIqQ7MAAAAQAANAAYALgQDwDjGwEA6hsBAAEcAAAkHAAAMBwHAL0cAQDPHAAA/BwBACYdAACwHQAAxx0AAOAeAADuHwEAhSAAAJogAAA4IQAAgiEAAIghAQCnIQAAwyEAAMshAACQIgEApCIAABsCwQAAFq5hZA==")
\ No newline at end of file
diff --git a/api/search.index/611726591c.js b/api/search.index/611726591c.js
deleted file mode 100644
index 155992e52..000000000
--- a/api/search.index/611726591c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQKBwgAAG/CIxhQAACHCAAAGIIwiQwCTwgAAE57AAAAPSuppEAAAhRAAANQaAADgGgAA9RsAANQeAABwHwAApx8AAN4fAAADIgAAEiIAAAUAARABEKHCAACGGqvAIIzEAAAWq8UAAB0ba8AEhOAAAAUq")
\ No newline at end of file
diff --git a/api/search.index/618a516f47.js b/api/search.index/618a516f47.js
deleted file mode 100644
index 4acb05573..000000000
--- a/api/search.index/618a516f47.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("wcoAAI8gJZDAAAAkgiH4IfEbwB0FAsIAAOJeHeT3Hmt24coAAIkgocQAAAUcIccAAAMiEiL/Cv4ADOYBwgAAIgHCAAAhBA==")
\ No newline at end of file
diff --git a/api/search.index/61ad5bad3c.js b/api/search.index/61ad5bad3c.js
new file mode 100644
index 000000000..d14a179bd
--- /dev/null
+++ b/api/search.index/61ad5bad3c.js
@@ -0,0 +1 @@
+rn_("RQHCAACmtiJk9iH3IYMihCIhyQAAjB8tIgWRwQAAEQ0cEt0cy8EBwcQAABrawgAAG73DAAAa0KHEAAASIRMAAuAAABq0bXPkexAAAP0UAAC2HQAAqB8AANYfAAAFEBDbwQSFwQAAICHIAAAcog==")
\ No newline at end of file
diff --git a/api/search.index/61b61e177f.js b/api/search.index/61b61e177f.js
new file mode 100644
index 000000000..70e68a9d8
--- /dev/null
+++ b/api/search.index/61b61e177f.js
@@ -0,0 +1 @@
+rn_("JQHCAAAQxRNzaBDEEwEGAsQAACIpyAAAImRhcuabHAAAfh0AAMMfAABqIAAAKCEAALwhAADHIQAABgAyAFUBwAAAE70WY4gOiQ6KDkAdph8BAAHQAAAiV3TSwwkAAPpbwABiywAAIBYhwAAA0Au+HRWBxQAAHKwioSEBQDowAAABAAAAAAATABAAAAByEHgQyBDtG/Ib2x6rH6wfsB+2H14gXyB3IBUh6CHpIe4hNiI3ImUiawPJAAAhtWFyczHAAACpHqoeiCBRyAAAsB9eIF8g6SFlIqHEAADSHWcBAf1RAAfEAAAhJ8QAACH8wwAAIhY7MAAAAQAAMwAWAKsQCwCcEwAA5RQAAOYaAwBkGwAAABwAAFocAgC7HAEAvB4BAOEeAADdHwIA5x8GAC8gAABVIAAAbyABAPkgAAAPIQAAdiEAANYhAQBUIgAAYiIBAKgiAQAFAsAAABJ7HxR6H2RnFQHAAAAU7hp0mBs [...]
\ No newline at end of file
diff --git a/api/search.index/6216191242.js b/api/search.index/6216191242.js
deleted file mode 100644
index 62d6ccd74..000000000
--- a/api/search.index/6216191242.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAASQB0SPh1idBsCwQAAIhBheRUBywAAFgwiYiYgKwLKAAAhP3FzMwADzgAAIlZldHfpMw4AAJQTAADAFAAA1hQAAF4cAADGHAAAfh8AACkgAACVIQAAFCIAAIABgIAA")
\ No newline at end of file
diff --git a/api/search.index/622f4b01db.js b/api/search.index/622f4b01db.js
deleted file mode 100644
index 373f9d2a0..000000000
--- a/api/search.index/622f4b01db.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHRAAAWyCJksSIFicQAADjsITQiNSIUdiIbg8UAACAQYcIAAJIdkx2jIbghuSFmIgUCwAAAYg8dEB0RHeoeoh9WIhPzH2twawPCAAAiFGVveSUBygAAFsMiZEgiqCIhwwAAzR+LIQWMwAAAEsghGYciEwcCwgAAIhZmaeRHIQAAmyEAAPshAAAKIgAARiIAAAEBAPsCYXIxxQAAVCJyInMiNYTAAAATRiEeIR8hsiExwgAA4B7hHsshQcEAAPAf8R/yHw8iBQLAAAAlGyFFIhJFIXV58wH9AgED6KYcAACNHQAAlB8AADAgAAAkIQAAoiEAACgiAAA3IgAAayIAAAQAAAAA+wJlbBUBwgAAFsYiZK0i8wD9AJAM93kTAAAnBwcEAQDOAJUAewAFAsAAAKBXHRP6IWZzG4rHAAAiYjHDAAC2HfkfQyIFg8AAADWoH0kg2SEV/SEFisAAABOJIhFWHQUCwAAAEjchEfc [...]
\ No newline at end of file
diff --git a/api/search.index/623c25c0a4.js b/api/search.index/623c25c0a4.js
deleted file mode 100644
index 7a36f4d1d..000000000
--- a/api/search.index/623c25c0a4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLDAAAWxx8RAxxibzUBwQAAGCohYn4Qxh0JIFUCwgAAccIcwxzEHMUc6R6hH7MfJcIfaiFpc/of+x/8HyEhYSHzAAJrbwEgIQAAFYHHAAAVmCFlIPMAA29zdOGXGgAAkh4AAAgFAsEAABSRISWyH2UhcXMFAssAABR7IhWGInFzAQQBwwAAIpBm56oeAAD/IAAANCEAADshAAA/IQAAQyEAACYiAADEIgAAYAAAASHDAACEE6EWRQHEAAAmPiKcImSAGv4afSBRIrv9CUAIxQAAH7G1AsEAAKJBHRC6GmVzbBUBRIl+HwAAKwLCAAAfwHJ4FQHQAAAWySJkuSKxxwAASCH7AmRyFQHFAAAWFiFimhwFAsAAABT2IBzOIWN0BQLAAAAW+SER+SAzcQcBhMAwYcIAACE8wQAAIPjEAAAhqMIAACE9KwLFAAAgWWN0G4nFAAAhBBcFAv0EgRfOAAAiFMsAACGpwgAAGtf [...]
\ No newline at end of file
diff --git a/api/search.index/623d1a1e3b.js b/api/search.index/623d1a1e3b.js
deleted file mode 100644
index 187865f85..000000000
--- a/api/search.index/623d1a1e3b.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocMAALMeIcMAALIeFiIFjMAAACJTHcghKdMhhyLjAP0hgQDEAAAhnuq7GgAAtBwAAKUdAADnHgAA9x8AAAIgAABHIQAAmyEAAPshAAAKIgAARiIAAAEREQEBACOCAsIAAB2qZnMrAskAACBmZnQ=")
\ No newline at end of file
diff --git a/api/search.index/624d1fa190.js b/api/search.index/624d1fa190.js
new file mode 100644
index 000000000..4485401c9
--- /dev/null
+++ b/api/search.index/624d1fa190.js
@@ -0,0 +1 @@
+rn_("BQLCAACi3hyi4BxzeSHSAABiIqgiGwLJAAAhYmxyJQHFAAAmbCJxImLqIe8hpQHBAAAUfyFmhiKlAcIAABSmIWaMIvuJocMAAFYgMcUAANUeSCBJIHcBAsIATeAAAB3e9DgdAACdALgBCAIVAcsAABbKImSzIvv9AUEB")
\ No newline at end of file
diff --git a/api/search.index/62c1cdc854.js b/api/search.index/62c1cdc854.js
new file mode 100644
index 000000000..99a2edd75
--- /dev/null
+++ b/api/search.index/62c1cdc854.js
@@ -0,0 +1 @@
+rn_("NQHAAABDvBbOG6McpR53ihpqImsiAQICxgAAHcjFAAAh82F25focAACuHQAAoB4AAOUfAABCIQAAHCIAABEREQWJxQAAOO4hNiI3IhR4IgUCwAAAFPUfYpQdlR2lIbohuyFoIm95JQHKAAAWxSJkSiKqIgWMwAAAEsohGYkiEwgCwgAAIhhmaeRJIQAAnSEAAP0hAAAMIgAASCIAAAEBADHFAABWInQidSI1hMAAABNIISAhISG0ITHCAADiHuMezSFBwQAA8h/zH/QfESIFAsAAACUdIUciEkchdXnzAf0CAQPoqBwAAI8dAACWHwAAMiAAACYhAACkIQAAKiIAADkiAABtIgAABAAAAAD7AmVs8wADcHR1AaIaAADFAcEAABUgIHdAHCUBwAAApE4ibeMfMiL7AmRuVQHEAAAQLyFzSB2mHokgiiB3ITHFAACGIFAhUSElAcQAABbMImSuIski8wECcHcBfB8AAOc [...]
\ No newline at end of file
diff --git a/api/search.index/62e3e46e4c.js b/api/search.index/62e3e46e4c.js
new file mode 100644
index 000000000..7bd4b5925
--- /dev/null
+++ b/api/search.index/62e3e46e4c.js
@@ -0,0 +1 @@
+rn_("FQHEAAAaHSJ3gxwVAcQAABocIneCHPsCY3RBwQAAYBCwHA4g8yFlwMEDQAAApEodFq0iFc4dAxUEFWcdDCENIWkiocUAALAhFQHAAAAUryFjyh0VAckAABZxImLvIfOFwghAE4EC4AAAH3hkc/sCb3ZxwQAAVxxYHLQekh85IUghGCL7/RBBAg==")
\ No newline at end of file
diff --git a/api/search.index/62f3748cc2.js b/api/search.index/62f3748cc2.js
new file mode 100644
index 000000000..8dc8b668a
--- /dev/null
+++ b/api/search.index/62f3748cc2.js
@@ -0,0 +1 @@
+rn_("JQLDAAAXDyIVzCFiZhoggiIVAcYAABX+IXICIEHHAADBH5AhkSEQIvMDAmZs47UTAACaFQAAPyAAAJcgAAAGADWBxQAAFY4h9RrRG9Ib+wNhZnA=")
\ No newline at end of file
diff --git a/api/search.index/63eece7a19.js b/api/search.index/63eece7a19.js
deleted file mode 100644
index 4569aeb4c..000000000
--- a/api/search.index/63eece7a19.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcMAAGkhXyKlAcMAABQvIWZ5IiOBhsAAABvcBQLBAAATziEUtB9uciUBzwAAFsoiZKwixyIhxwAAYSKnIiUBxgAAFsEiZFoioCLziwNlbHCvA/0DiAnDAAAeyMgAACE5")
\ No newline at end of file
diff --git a/api/search.index/6426302fa6.js b/api/search.index/6426302fa6.js
deleted file mode 100644
index de4a60ff3..000000000
--- a/api/search.index/6426302fa6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcYAALIisyLAIsIi8wIBZOhIHQAA/x4AANAhAAAfIgAAVyIAAFsiAAB3IgAAnyIAAKEiAAAQEAAQACsCxQAAH31mdDWCxAAAFBIh/Ru+HaMfIcAAAKQO5w4hxgAAiiGpIrv9ZAEA4AAACcIVAcUAABYWIWKaHAUCwAAAFPYgHM4hY3QFAsAAABb5IRH5IDNxBwGEwDBhwgAAITzBAAAg+MQAACGowgAAIT0rAsUAACBZY3QbicUAACEEFwUC/QSBF84AACIUywAAIanCAAAa18cAACBaAT0PAADr/REASMIAAB0N")
\ No newline at end of file
diff --git a/api/search.index/64a6fbd458.js b/api/search.index/64a6fbd458.js
new file mode 100644
index 000000000..d329d9d62
--- /dev/null
+++ b/api/search.index/64a6fbd458.js
@@ -0,0 +1 @@
+rn_("McUAALwdAh8DH1WIxAAAF7YfohPuFO8UNB20HWUDwAAAFhEgEw0fExYhYmlqzxoFGyIgIyAFIQkhpYLDAAAhAiIiIi8i8wUCbHP5oRYAAAEAtgI8AzAC8wAEAAUApQAFAsAAABS6IhbcH2N01wIA/RMREMMAACGiygAAIYA7MAAAAQAAKgAFAGQQAQDUEAMArBYAAHUbIgAPIgAA")
\ No newline at end of file
diff --git a/api/search.index/64b2aceaf2.js b/api/search.index/64b2aceaf2.js
deleted file mode 100644
index b30ffbb87..000000000
--- a/api/search.index/64b2aceaf2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcUAAFgidCIFAsAAABerIRO1Hml5pQHNAAAUkCJmxCIFAsAAABOxHRh2IHJ1RQHCAAAXpSFt5RvsG+0b8xwVAcIAABSUIGPfHyUBwgAAEkMdctwa8BzzgQJlbCUBxQAAGZQiZiodcCAFAsEAABGLHhdzIGlwIccAAA0hUiIJlMgAACH/0AAAInXzgQJmbCsCywAAIjZydAEA/sBMtQsXe5K7tnNmC5YxOY06EMIBIjL10scAACATdHOgNkHAAAAekVOo+ZNk0gAAInbHAAAgSEzNpWFvMma58hRco4gRIPuuDgAApgF8BPAB2AR8BEoAAQABAKYBAgA=")
\ No newline at end of file
diff --git a/api/search.index/653d4ad6cc.js b/api/search.index/653d4ad6cc.js
deleted file mode 100644
index d492536c7..000000000
--- a/api/search.index/653d4ad6cc.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAXKSIypxyoHMgfb3khxgAA4h4uIaHEAABIHVcBAcADwcUAACKrxAAAHczmoRMAAO4UAAABFQAALRwAAGUdAAAKIQAAZyIAABMQAQAFicUAADjsITQiNSIUdiIFAsAAABTzH2KSHZMdoyG4IbkhZiJveSUBygAAFsMiZEgiqCIFjMAAABLIIRmHIhMIAsIAACIWZmnkRyEAAJshAAD7IQAACiIAAEYiAAABAQAxxQAAVCJyInMiNYTAAAATRiEeIR8hsiExwgAA4B7hHsshQcEAAPAf8R/yHw8iBQLAAAAlGyFFIhJFIXV58wH9AgED6KYcAACNHQAAlB8AADAgAAAkIQAAoiEAACgiAAA3IgAAayIAAAQAAAAA+wJlbPMAA3B0dfKgGgAA1gTFAcEAABUeIHc+HCUBwAAApEwibeEfMCL7AmRuVQHDAAAQLSFzRh2kHocgiCB1ISuFwwAAIB8xxQAAhCBOIU8 [...]
\ No newline at end of file
diff --git a/api/search.index/654fd828ef.js b/api/search.index/654fd828ef.js
new file mode 100644
index 000000000..342c4c6b7
--- /dev/null
+++ b/api/search.index/654fd828ef.js
@@ -0,0 +1 @@
+rn_("AUPhYBwAAIAfAACIGwLGAAAiJml0McMAALEWshbCHzUBwAAAFqciZIUhhiFnIgUCwAAAGXcgRKkf4B8FIhQiZXAxwgAAgSCCIIchFQHCAAASsiJtmyIjhwLHAAAiuGFrYwcDyQAAIqVhY2sBtiEAACUBxAAAFsMiZFwioiJzAP0NAATDAAAeggHJHwAAIckAADghyyGXBwDEAi/EAAAf5MEAAB1JAVciAAA=")
\ No newline at end of file
diff --git a/api/search.index/655d487b78.js b/api/search.index/655d487b78.js
new file mode 100644
index 000000000..b49883af4
--- /dev/null
+++ b/api/search.index/655d487b78.js
@@ -0,0 +1 @@
+rn_("BQPGAAARUCIWhSIYlSJpc3QrAsMAACHGY27zBQFzAdMbAAAVAc8AABa9ImSUIhUByQAAFpMiZD4iFQHMAAAWtyJkhCIVAcwAABa2ImSDIvuF84PAAIYr/QA4CMUAACH0zAAAIqbBAAAU1aUCxQAAFhohGO0hYneeHPuZ")
\ No newline at end of file
diff --git a/api/search.index/656aace04b.js b/api/search.index/656aace04b.js
new file mode 100644
index 000000000..2fdf599ad
--- /dev/null
+++ b/api/search.index/656aace04b.js
@@ -0,0 +1 @@
+rn_("FQHAAAAUOiFjWSDzAwFzAcUfAAATAALHAAAg9mZyAWwQAAArAsMAABtkYWehwwAAtR4hwwAAtB4YIgWMwAAAIlUdyiEp1SGJIuMA/SGBAMQAACGg6r0aAAC2HAAApx0AAOkeAAD5HwAABCAAAEkhAACdIQAA/SEAAAwiAABIIgAAARERAQEAKwLCAAAdrGZz+wJjbg==")
\ No newline at end of file
diff --git a/api/search.index/658cdacd13.js b/api/search.index/658cdacd13.js
deleted file mode 100644
index a95e10ea4..000000000
--- a/api/search.index/658cdacd13.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHFAAAY8iFjjh+DIjUBxAAAFqUiZIMhhCFlIiuJwgAAHVJjAAPEAAAhY2F0deSsEwAAaRUAAMkdAABtHwAAjB8AAAIRAKHGAAC7H1WCwAAAFbof6hpQHVEdth+3H/sCZnQbisUAAB7tIcAAAFsc9SChxAAAIiBjAcAIQsMAACH25r4bAACfHwAAxh8AAGEgAACTIAAATiIAAJ0iAADQAAAQNQHEAAAWmyJk/SD+IFAiFxkB/SeJB8IAAB2nwwAAIcfEAAAfjcEAABrpyAAAIdLHAAAik+d6EAAA2hAAAMQaAAACHAAADB8AAAUhAADTIQAAhyIAAAQQAAAFicAAACGyDoYTEscdAUM7MAAAAQAAIwACAKoWAABzGyIA0wD9EVACwAAADALBAAAWpuEVBQAAVgcAAA8=")
\ No newline at end of file
diff --git a/api/search.index/66605bfbaa.js b/api/search.index/66605bfbaa.js
deleted file mode 100644
index c05257245..000000000
--- a/api/search.index/66605bfbaa.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("pQLAAAAVxB6gwRplc5QWMcUAABwhsCGxIfsCanAFjMAAABShIRx0IhsCxAAAHbJjZPuKpQHCAAAW8SF2GiIxzAAAVCJyInMiOwPhAAAiaGlucyOBAsEAACHaYXT7AmFy")
\ No newline at end of file
diff --git a/api/search.index/669daf9dd7.js b/api/search.index/669daf9dd7.js
deleted file mode 100644
index bf68e4d3e..000000000
--- a/api/search.index/669daf9dd7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("UcYAAKsfYiHwIWoibyLzAAFi5qUWAABtGwAAOB0AAA4fAAC4HwAA6CEAAO0hAAABAQAA8wMBcvKNEwAAKgorAsEAACBbaXI=")
\ No newline at end of file
diff --git a/api/search.index/66bf2a153d.js b/api/search.index/66bf2a153d.js
new file mode 100644
index 000000000..0516349ae
--- /dev/null
+++ b/api/search.index/66bf2a153d.js
@@ -0,0 +1 @@
+rn_("UcIAAAAcuxy8HFUg+SABAwHFAAAgEHKJEBwAABsCzgAAIhBhchWQwwAAFPohwh3zBIjy1RoAAFABAQgBxQAAIZNyiQQfAAChyAAA0B/nAQDAhKTJAAAgdQFeHAAAO5bMAAAgFhUBwAAAINsQKiBuKwWlkMAAABrMH6QOAQCEwQAAE7HlGwwAAIsOAACMEwAA6hwAABcgAACPIQAAAQUQBQLAAAAgEB2LHiorIJchbHIhxgAAKyCXIaHDAADNEDUBwAAAEnIbbTkPOg9xIDHGAACXHZgdDCAXAQH9AlADwQAAE5PFAAAgDccAACK66GQOAADKGgAAbhsAAPobAAA/HQAAuh0AAJ4eAAAdIAAARCEAAKAAAQAABYPAAAAfGSIYjR+3AQD9OEBAwgAAFPTkIQUAAHkJAABuEAAAtxgAADMdAAAKAACvD8EWp8MAACEiwAAAImTBAAAaoQ==")
\ No newline at end of file
diff --git a/api/search.index/66ca300d9c.js b/api/search.index/66ca300d9c.js
new file mode 100644
index 000000000..377ee0114
--- /dev/null
+++ b/api/search.index/66ca300d9c.js
@@ -0,0 +1 @@
+rn_("FQHBAAAV6hpzygthwwAAnBadFp4Wnxb8Gv0aBQLAAAARrCIbux9kbhUBygAApE4ibTIiJQHGAACk6yFtrCFLIjvACEjMAAAiKBsC4AAAGupkcvMAlvOLCQAAQxE7AUHDAACYIJkgnCHCIaHKAAB2H/MAwSAF6h4OAABwEAAAehAAAJITAACdEwAAzRoAALkcAADVHAAAaB0AAH4gAAAjIgAAkAAAFgAA")
\ No newline at end of file
diff --git a/api/search.index/66dedab954.js b/api/search.index/66dedab954.js
deleted file mode 100644
index bac9a189c..000000000
--- a/api/search.index/66dedab954.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocoAAO4fFQHBAAAWySJkuSJByAAA2h3bHScgdyD7gyHDAACZE54apYLBAAAhACIgIi0i+wNhcnehxQAAoR0VAckAABbwIWK4H/OCAmZ3BQLAAAAXlhwVeR9ydNcCAP5ARBAKwwAAIfLDAAATuPsgBQAAVwSNArQCiQA3BDwH4wBEATMAewE=")
\ No newline at end of file
diff --git a/api/search.index/66df9be29d.js b/api/search.index/66df9be29d.js
deleted file mode 100644
index 4330a66d1..000000000
--- a/api/search.index/66df9be29d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUDhlxoAAJIeAAAIBQLBAAAUkSElsh9lIXFzBQLLAAAUeyIVhiJxc6HEAABBHQFFiX4fAABnBwH9EaEDywAAIZXGAAAfseeXEwAA2BQAAPwcAABvHQAAAh8AAJUfAADKHwAA1h8AABOIiAE=")
\ No newline at end of file
diff --git a/api/search.index/673d09bac9.js b/api/search.index/673d09bac9.js
new file mode 100644
index 000000000..08cd8b40b
--- /dev/null
+++ b/api/search.index/673d09bac9.js
@@ -0,0 +1 @@
+rn_("JQHFAAAWHCFiphyOHSUB0AAAFsIiZFkioSIlAcgAABa1ImTTIXoiJQHHAAAWsSJkriFwIvODAnJzJQHMAAAWtCJk0iF5IiUBxAAAFrkiZBciiiITiQLDAAAii2NsFQHIAAAWsCJkbyIVAcoAABbBImSaIhUBygAAFsAiZJki+4UVAcYAABaeImRTIvOBA2VtbvsCZG83BwD9HJARwwAAG/jGAAAdxwG7DgAA")
\ No newline at end of file
diff --git a/api/search.index/6744cb10c1.js b/api/search.index/6744cb10c1.js
new file mode 100644
index 000000000..d09f809cb
--- /dev/null
+++ b/api/search.index/6744cb10c1.js
@@ -0,0 +1 @@
+rn_("FQHAAAASfRptPg4VAcEAAOQcHHLSCaWBwAAAFWUhbx8jhgLBAAAg92lzKwLAAAAafGlupQHDAAAwUhz/HwAgc/IexQLAAAAUoiEbgCFibdQQIcQAALwUuBx/Af0MUALJAAAhO7v9EABGywAAIhI=")
\ No newline at end of file
diff --git a/api/search.index/675e7048cc.js b/api/search.index/675e7048cc.js
new file mode 100644
index 000000000..cfcfbd841
--- /dev/null
+++ b/api/search.index/675e7048cc.js
@@ -0,0 +1 @@
+rn_("JQHGAAAWkyJkQiA+IkWEwAAAowscDR0OHX0ffh8VAcMAABAKHHPRIaHBAACFHfMAA2luc/WBEwAARgMcBrMA4gQlAcQAABbFImRKIqoiIwMCxwAAIfRjbOTDDgAAWg8AAOkbAACQHwAAhSIAAAIAAAUDwgAAEiogGSYiGkUiYWVzK4zAAAAcmCsCxQAAHoJlcgECAcMAACKSZuesHgAAASEAADYhAAA9IQAAQSEAAEUhAAAoIgAAxiIAAGAAAAGhxwAAuR53BwD9EzEFxgAAHtvQAAAiV+LDCQAAvQoAAIMeAAAAMA==")
\ No newline at end of file
diff --git a/api/search.index/678d5ff199.js b/api/search.index/678d5ff199.js
new file mode 100644
index 000000000..c5668994f
--- /dev/null
+++ b/api/search.index/678d5ff199.js
@@ -0,0 +1 @@
+rn_("FQHDAAAWvCJkjyITAALDAAAb8HN067UOAAAyDwAAOw8AAFYdAADcHgAAGyEAAFghAABoIQAAbSEAAJYhAADdIQAAZiIAAAAxEJAQkAUCwAAAFskfEQUcYm8FAsAAACcFIhQiEwMiZXChwgAA/BtlAcEAAKTAIW0UHRUdFh0XHX0hfiEVgsUAABR1IfAeGwLBAAAfkXV54wL9AwEDxAAAIZrDAAAfkuiwEwAAuBoAAOAbAABeHQAARyAAAGcgAACDIAAAuCEAAD8iAAADEAAQACHEAADOGgkcJQHPAAAWzCJkriLJIkUBxwAAGGUiZ2IiYyKoIqkiAUblVh0AABshAABYIQAAaCEAAG0hAABmIgAAEJAQJQHGAAAWwyJkXCKiIhUByAAAEAkhc8AfocQAALkc+wJvcvcCAf00yADFAAAh0OXBDgAAWQ8AAKAcAAA+HQAARh0AAMUhAAAQABD7AmdzdwUA/kBGAEnGAAA [...]
\ No newline at end of file
diff --git a/api/search.index/67d5df3e64.js b/api/search.index/67d5df3e64.js
new file mode 100644
index 000000000..1a1db3b76
--- /dev/null
+++ b/api/search.index/67d5df3e64.js
@@ -0,0 +1 @@
+rn_("IcMAAGshYSKlAcMAABQxIWZ7IiOBhsAAABveBQLBAAAT0CEUth9uciUBzwAAFswiZK4iySIhxwAAYyKpIiUBxgAAFsMiZFwioiLziwNlbHCvA/0DiAnDAAAeysgAACE7")
\ No newline at end of file
diff --git a/api/search.index/68b8008be4.js b/api/search.index/68b8008be4.js
new file mode 100644
index 000000000..ba0f92b20
--- /dev/null
+++ b/api/search.index/68b8008be4.js
@@ -0,0 +1 @@
+rn_("BQLDAAAajiIdqyJldCMGAsUAACGbYnABzR0AAPMFAWMB+yEAAAXAwYCCAAAStRYSthYT4xoFAsAAABwjIRnsHmNz+wJlcwUCxQAAGZwhGsshY2VLh8EAABzUxAAAHwAFAsAAABR6EB4iIm9yBQPIAAASKiAZJiIaRSJhZXNLwAJByAAAHuvLAAAgKTHAAACzA6IECgX3GAD+QgegA8YAABrizQAAISLEAAATpuMZAAAAIgAAAJQBAACaAQAAMBA=")
\ No newline at end of file
diff --git a/api/search.index/691be0b9ba.js b/api/search.index/691be0b9ba.js
deleted file mode 100644
index c115f282f..000000000
--- a/api/search.index/691be0b9ba.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McMAAK0WrhZ2IBMBAsIAABuoZnLiDAwAAF0OAACYGgAAAFAFAsAAABOrHXawHLEcshyzHKMdpB3SIWpwFQHEAAATwR1i1hobAsQAABvvcXP7ikHCAACsHa0dQCFBITHIAACbIZwh+yFFhMIAABEPIqIhKCI3ImsiOwPJAAAiSHB0dSOEA8AAAB/hwgAAIaNpc3TzgQJpbqHEAAChHiUByAAAFrMiZNEheCIlAccAABavImSsIW4i84HAAOA7wBCgwAAAHQifAf0FQAnEAAAWqMYAAB92")
\ No newline at end of file
diff --git a/api/search.index/693c16ca69.js b/api/search.index/693c16ca69.js
deleted file mode 100644
index 654e69a89..000000000
--- a/api/search.index/693c16ca69.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQPDAAAhfhPEFiL2GsceIwAcoB9pa241AcEAABgqIWJ+EMYdCSBVAsIAAHHCHMMcxBzFHOkeoR+zHyXCH2ohaXP6H/sf/B8hIWEh8wICa28BICEAAPuK")
\ No newline at end of file
diff --git a/api/search.index/697280d816.js b/api/search.index/697280d816.js
deleted file mode 100644
index 1df5eb8ce..000000000
--- a/api/search.index/697280d816.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocwAAC0i0cIAAEIcIcIAAH8TxRYrAk6bL/v3bnVbA8wAACKebG11JQHIAAAWriJkZx1tIiUBygAAFr8iZD8gmCIlAcoAABa+ImQ+IJci+4UFAsQAABZ6IhNeIm90JQHGAAAWnCJk/hpRIu8H/ZFwCcsAACByygAAIC4=")
\ No newline at end of file
diff --git a/api/search.index/6996e99e56.js b/api/search.index/6996e99e56.js
deleted file mode 100644
index 5c6862c8e..000000000
--- a/api/search.index/6996e99e56.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAnAyISIhMBImVwJQHPAAAWyiJkrCLHIiUBxwAAGGMiZ2EipyIlAcYAABbBImRaIqAi84IDZWxw84ODFQHGAAAgeyDCIXIdIPMEAXAB3RoAAPsCY3M=")
\ No newline at end of file
diff --git a/api/search.index/69b375c363.js b/api/search.index/69b375c363.js
new file mode 100644
index 000000000..8563510b6
--- /dev/null
+++ b/api/search.index/69b375c363.js
@@ -0,0 +1 @@
+rn_("ocUAABcgBYbAAAAkxB9sIRKYFgFB5MQcAADrHgAAox8AALUfAAClIgAAMAAAockAANYh8wADZ2lz4zgPAAD8HwAAIyEAAGMhAAACACsCygAAIkx0eaMA/RgQAsgAACGVxQAAIqXzkgkAAGoL8AY=")
\ No newline at end of file
diff --git a/api/search.index/69d4ba470f.js b/api/search.index/69d4ba470f.js
new file mode 100644
index 000000000..d0844833e
--- /dev/null
+++ b/api/search.index/69d4ba470f.js
@@ -0,0 +1 @@
+rn_("ocIAAOAcBYbAAAARmxAaVSAFAsQAABf5IBmBIWNwAQEB4QAAFMVz6LMOAACSEAAA0BwAAN4cAAAbHQAAIx0AABIfAABrIAAATSEAAAgREREQS8ACgcMAACI6xwAAH8IhxgAAWiJ2IhOCAtIAACJoZHUFAsEAABWPHhCBGmVzIcYAALkivyLzBAFk5c8eAADNHwAAFyIAADMiAACKIgAAmCIAABEBABMFAsMAACKLY2yCARsAAPuKFQLBAAAVLCITXSBmd1cZI4ICwwAAIi5pbAWDwAAAE6AW0PMO+wJydPsDYXJ1FQHBAAAWvSJklCITjALDAAAiYW1vBQLFAAAUDyAVdiBxc/uJpQHJAAAU+CFmnyIlAckAABaTImRCID4iJQHMAAAWtyJk9yGEIiUBzAAAFrYiZPYhgyL7hecBAf0EMA7HAAAhksIAAB6z4hwOAADvGgAA3xsAAAEANQHGAAATVCBm/RzuH+8fO47 [...]
\ No newline at end of file
diff --git a/api/search.index/69e8c3a44e.js b/api/search.index/69e8c3a44e.js
new file mode 100644
index 000000000..f3fa8afb7
--- /dev/null
+++ b/api/search.index/69e8c3a44e.js
@@ -0,0 +1 @@
+rn_("YcAAAH4cfxyJH4of8B/xHyHDAAACHKIfIcIAAPgayR4BAQHEAAAcrWjjvg4AAFEPAABrHAAAhRwAACIJIcAAAIATxhb7AmRt8wD9ACUC6NUUAABEHAAA9x4AAMcfAABKIAAAliAAAPYgAAA6IQAAySEAAAQQAAAA")
\ No newline at end of file
diff --git a/api/search.index/69fa4d98bb.js b/api/search.index/69fa4d98bb.js
new file mode 100644
index 000000000..0ca5d040a
--- /dev/null
+++ b/api/search.index/69fa4d98bb.js
@@ -0,0 +1 @@
+rn_("AUE7MAAAAQAA9QACAMwW9AB9GgAAQcIAANwd3R0pIHkgFQHQAAAWpyJkZyIVAdIAABbIImSvIhUBzwAAFr8iZJgiMwbCAgjTAAAipOQwHAAAhSAAAIIhAACnIQAAkCIAAHAAEKUBwAAAELIiNeAcFQHMAAAWnSJkUiIVAccAABZuImTIIfsCcnMxzQAAeiB7IAcia8QCBMEAACGr+/0ZQQg=")
\ No newline at end of file
diff --git a/api/search.index/6a6b91bf97.js b/api/search.index/6a6b91bf97.js
new file mode 100644
index 000000000..283656889
--- /dev/null
+++ b/api/search.index/6a6b91bf97.js
@@ -0,0 +1 @@
+rn_("BQLAAAA0tB92IGchIsUd0h5wdSHDAAAUIXUhpQHGAACg/x9z8h5RwgAADyAQICYgHyGTIfOBhlUBwQAAuEohZKUT9RT2FDUdvB+hxAAAHiL7AmFjAUI7MAAAAQAA9gACAGoQAADGE/UA8wABbTswAAABAAD4AAMAxQkAAL4K9gCzGgAANQHAAAA1vB0CHwMfd2QQZRAPIiWCwQAAMW4buh27HW4QMx37/kAKyAE=")
\ No newline at end of file
diff --git a/api/search.index/6aaa34045a.js b/api/search.index/6aaa34045a.js
deleted file mode 100644
index 878e4d74d..000000000
--- a/api/search.index/6aaa34045a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcYAALcivSLzBAFk5c0eAADLHwAAFSIAADEiAACIIgAAliIAABEBABMDAsMAACKJY2z2/xoAAAEArwEgAf0A4wA=")
\ No newline at end of file
diff --git a/api/search.index/6abf01b304.js b/api/search.index/6abf01b304.js
deleted file mode 100644
index 9454d1417..000000000
--- a/api/search.index/6abf01b304.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JZDDAAAkgiH4IfEbwB2lAcMAABTJH2ZdIiHAAADwDm8bpQHGAAAULyFmeSIVwMANAAAAFuAdGE0hFLke7w7zgf0IQAYhwgAAqxarHLMA/UhQAMAAACE59HEQAABkBP4FUAE=")
\ No newline at end of file
diff --git a/api/search.index/6ae9fa157b.js b/api/search.index/6ae9fa157b.js
new file mode 100644
index 000000000..b0d763af2
--- /dev/null
+++ b/api/search.index/6ae9fa157b.js
@@ -0,0 +1 @@
+rn_("ocIAAJkWFQHEAAAWGyFmoBwVAcEAABO/FnSAGvsDZW9yZQHBAAAWvCJkqBCYFlUhViH5IY8iKwLBAAAhOXR6ocQAAMgaIcQAAMQfbCF3AQD9MCEEygAAIckBUyEAAA==")
\ No newline at end of file
diff --git a/api/search.index/6b07abef9d.js b/api/search.index/6b07abef9d.js
new file mode 100644
index 000000000..637ef01d4
--- /dev/null
+++ b/api/search.index/6b07abef9d.js
@@ -0,0 +1 @@
+rn_("AQQBxgAAIBtyiZwbAAAbAsEAABB0YXkBQOQ1DgAAYBwAAIAfAAArIAAAlyEAAIiAACHFAAAdIEQhFQHDAAAWvCJkjyITAgLDAAAb8HN04bUOAAA7DwAAAwGIAsYAACFn6AAAHpRyc6HKAACQIhUBwAAAFDohY1kg8wMBcwHFHwAAEwECxwAAIPZmcgFsEAAAocMAALUeIcMAALQeGCIFjMAAACJVHcohKdUhiSLjAP0hgQDEAAAhoOq9GgAAthwAAKcdAADpHgAA+R8AAAQgAABJIQAAnSEAAP0hAAAMIgAASCIAAAEREQEBACsCwgAAHaxmc/sCY24BBQHFAAAhH3KJmR0AAKHGAABCIfMFAXDiOBwAADQgAACLIAAABVD7AmxyMcQAAP0g/iAAIrc/AP00ZRfHAAAdxMQAACAe5BoFAABWCQAAdxAAAPUbAAAIHQAAEgEQ")
\ No newline at end of file
diff --git a/api/search.index/6b2818cfd5.js b/api/search.index/6b2818cfd5.js
deleted file mode 100644
index 5094b34cd..000000000
--- a/api/search.index/6b2818cfd5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHCAAAQwxNzZhDCE1UBwQAAE7sWY4YOhw6IDj4dpB8hwAAAzgu8HaHDAACzHiHDAACyHhYiBYzAAAAiUx3IISnTIYci4wD9IYEAxAAAIZ7quxoAALQcAAClHQAA5x4AAPcfAAACIAAARyEAAJshAAD7IQAACiIAAEYiAAABEREBAQAjgwLCAAAdqmZzJQHBAAAwpx6oHoYgcy0gdCEVAcAAABTsGnSWG/sDY29zFYTDAAATaCGwH/MDAXTSnxwAAOv7/QEBSg==")
\ No newline at end of file
diff --git a/api/search.index/6b6d78aab7.js b/api/search.index/6b6d78aab7.js
deleted file mode 100644
index bf8cfe0cc..000000000
--- a/api/search.index/6b6d78aab7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQPGAAAxYSCTIE4iFoMiGJMiaXN0DB+xyQAAdyEhxAAA2hwIIKUBwQAApBAhbdQfEwQCwQAAIENpcuRsHQAA6x4AAC4gAABnIAAAxCEAABEAAPMA/RQhAOFQHAAA/R8AAAE=")
\ No newline at end of file
diff --git a/api/search.index/6bc00b82da.js b/api/search.index/6bc00b82da.js
deleted file mode 100644
index 8b8c11d50..000000000
--- a/api/search.index/6bc00b82da.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcAAADccOBx5HHocFQLDAAAWRSISyyFiciQhI4cCwwAAIXVmcxsCxgAAHTJhchUBxAAAEDEgc8QfswDACOjHAAAdM8IAABOI+rsJAAABAOcRLwBZAAEAkQATALkCKAA=")
\ No newline at end of file
diff --git a/api/search.index/6bc895d2cf.js b/api/search.index/6bc895d2cf.js
new file mode 100644
index 000000000..3967fa5ca
--- /dev/null
+++ b/api/search.index/6bc895d2cf.js
@@ -0,0 +1 @@
+rn_("AQCQxAAAG+nl/gsAAEAOAADZGwAAMyAAAEwgAAAvIQAACRAAIcIAAG0QRR2hxgAA+hxBwwAAxB0cIBkhlCEFAsEAABVMIBY8IWZuNQHAAAAUCyJw9h9AISAiBYnAAAAXQiIRcCGhxAAA6yEFicQAABKNIhGHIiOFAuAAACIKZGYFAsQAABZ8IhNgIm90GwLNAAAioGhvZzYBwA/rxAAAH3HCAAAhmdcAACLHwwAAIfHnjhAAACgdAAB2HwAAfx8AACwhAACDIQAArCEAAEsiAAAgEAAABQLAAAAUsCITziFmchUBzgAAFq0iY2ki8wMBY4L4HAAAocEAAGcbY4EDwwAAHX1haW53DwD9ErEHxwAAHTvCAAAafjowAAABAAAAAAArABAAAAC5C7oLuwuvE9YU6xR/Gtsa3hr6GvsaphvVGwccCBxTHPIc9BwYHUgdph7HHsYfyx/iHywgLSA6IDsgPCA9IFggiSCKIJE [...]
\ No newline at end of file
diff --git a/api/search.index/6bd0e4e6d4.js b/api/search.index/6bd0e4e6d4.js
deleted file mode 100644
index d7051c695..000000000
--- a/api/search.index/6bd0e4e6d4.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcMAAIUaqBtxwwAAkhOTE60WrhYbHRMgdiAhxgAAWCJ0IhsC0gAAImZkdXMA/TAAA+AAAA5I4wwMAABdDgAA3BQAAJgaAAAAVQ==")
\ No newline at end of file
diff --git a/api/search.index/6c30f830fb.js b/api/search.index/6c30f830fb.js
new file mode 100644
index 000000000..37a896b3b
--- /dev/null
+++ b/api/search.index/6c30f830fb.js
@@ -0,0 +1 @@
+rn_("JZDDAAAkhCH6IfMbwh2lAcMAABTLH2ZfIiHAAADyDnEbpQHGAAAUMSFmeyIVwMANAAAAFuIdGE8hFLse8Q7zgf0IQAYhwgAArRatHLMA/UhQAMAAACE79HMQAABkBP4FUAE=")
\ No newline at end of file
diff --git a/api/search.index/6c6961a558.js b/api/search.index/6c6961a558.js
new file mode 100644
index 000000000..bca59ee96
--- /dev/null
+++ b/api/search.index/6c6961a558.js
@@ -0,0 +1 @@
+rn_("IcEAAI0TDR8FAsAAABcrIjKpHKocyh9veSHGAADkHjAh8wICbHTioxMAAPAUAAAvHAAAEwAhxgAAsSLFIlMBA8AAACFyZGVp2K4hAAARiyYOAScEIcMAAH0QwRwFAsAAABMBIBDAHGFzBQLDAACnGiKiTSFkc1MBwAgGxAAAIG3S9BoAANwFAsAAABO4HhDzGmFzBQLAAAAUlR/gbBxpcwUCwwAAp9ghomsgZHPzBMAIhuOzEwAAchUAAK0hAACVIgAAFAAhxAAAayFhIhUBwAAAFr0iZJQiKwLDAAAbz2lzBQLDAACnCiGiGx1oc9cDAP2gUILEAAAcreolBQAAlwkAAL4OAABRDwAAaRAAAL8WAABrHAAAhRwAAKIcAADYIQAAGiIAAAAiAAkBEHX9wSAQGQAAphIfG3whHKIhFOIcHKMhqw6sDq0Org79Dv4O/w77/RGBAA==")
\ No newline at end of file
diff --git a/api/search.index/6c9cbc058d.js b/api/search.index/6c9cbc058d.js
deleted file mode 100644
index 78a6ea38f..000000000
--- a/api/search.index/6c9cbc058d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McEAAOwhNCI1IhUBwAAAHisicL0T84OKCQLQAAAiKuYAABupaXAF/cMCABoAABhEIhxwIhIiIRglIiMFAsUAAB+9YnABuRYAANv9ARgIyQAAIHw=")
\ No newline at end of file
diff --git a/api/search.index/6ca82cb0c3.js b/api/search.index/6ca82cb0c3.js
new file mode 100644
index 000000000..ac5154ab3
--- /dev/null
+++ b/api/search.index/6ca82cb0c3.js
@@ -0,0 +1 @@
+rn_("IcMAAIcaqhtxwwAAlBOVE68WsBYdHRUgeCAhxgAAWiJ2IhsC0gAAImhkdXMA/TAAA+AAAA5K4w4MAABfDgAA3hQAAJoaAAAAVQ==")
\ No newline at end of file
diff --git a/api/search.index/6ceffd1e5e.js b/api/search.index/6ceffd1e5e.js
deleted file mode 100644
index cc502b267..000000000
--- a/api/search.index/6ceffd1e5e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McAAADgFOQXBHSHGAAC3Ir0i8wABZOXNHgAAyx8AABUiAAAxIgAAiCIAAJYiAAARAQATAALgAAAWpGNs+T0FAADqCAsAiQh+Bo4A/AA9AgEA8wACZXnhCQwAAFcOAAAB")
\ No newline at end of file
diff --git a/api/search.index/6cf0804685.js b/api/search.index/6cf0804685.js
new file mode 100644
index 000000000..8fc844484
--- /dev/null
+++ b/api/search.index/6cf0804685.js
@@ -0,0 +1 @@
+rn_("BYPBAAAS1BwVAB8Fg8EAABLTHBX/Hmv8DgDgAAAQhiHEAAAUIXUh8wGCOjAAAAEAAAAAAEIAEAAAAMwOzQ7ODs8O0A7RDtIO0w7UDtUO1g7XDtgO2Q7aDtsO3A7dDt4O3w7gDuEO4g7jDuQO5Q7mDucO6A7/GyocKxwsHJocrhw2HTcdlx2YHcAd8B70HqUfrR+vH78fDCARIBkgJyB0IIcgGCEaIRwhHSElIWQhaSGLIZshuSHyIQ4iRyJsInEikwAExAAAIfXFAAAc0mVydXaY9AkAAA==")
\ No newline at end of file
diff --git a/api/search.index/6cfc410d8b.js b/api/search.index/6cfc410d8b.js
new file mode 100644
index 000000000..67fbf6f8d
--- /dev/null
+++ b/api/search.index/6cfc410d8b.js
@@ -0,0 +1 @@
+rn_("FQHRAAAWyiJksyIFicQAADjuITYiNyIUeCIbg8UAACASYcIAAJQdlR2lIbohuyFoIgUCwAAAYhEdEh0THewepB9YIhP1H2twawPCAAAiFmVveSUBygAAFsUiZEoiqiIhwwAAzx+NIQWMwAAAEsohGYkiEwcCwgAAIhhmaeRJIQAAnSEAAP0hAAAMIgAASCIAAAEBAPsCYXIxxQAAViJ0InUiNYTAAAATSCEgISEhtCExwgAA4h7jHs0hQcEAAPIf8x/0HxEiBQLAAAAlHSFHIhJHIXV58wH9AgED6KgcAACPHQAAlh8AADIgAAAmIQAApCEAACoiAAA5IgAAbSIAAAQAAAAA+wJlbBUBwgAAFsgiZK8i8wD9AJAM93sTAAAnBwcEAQDOAJUAewAFAsAAAKBZHRP8IWZzG4rHAAAiZDHDAAC4HfsfRSIFg8AAADWqH0sg2yEV/yEFisAAABOLIhFYHQUCwAAAEjkhEfk [...]
\ No newline at end of file
diff --git a/api/search.index/6d167f6bee.js b/api/search.index/6d167f6bee.js
deleted file mode 100644
index b9cf259a9..000000000
--- a/api/search.index/6d167f6bee.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQIBwgAAHTlt5rYTAAARIAAAIiAAABAhAAC+IQAA6SEAAEwiAAAREREQpQHGAACkKyFiWh0VAcUAABDGHHMBHPvAAMQbA8kAACF+4AAAHpFhZXM=")
\ No newline at end of file
diff --git a/api/search.index/6d24fa1c05.js b/api/search.index/6d24fa1c05.js
new file mode 100644
index 000000000..6a5016c7e
--- /dev/null
+++ b/api/search.index/6d24fa1c05.js
@@ -0,0 +1 @@
+rn_("McMAAMcfliA6IQUCwwAAGo4iHasiZXQjBALFAAAhm2JwAc0dAAAVAsMAABmVIaUXIGRz7BsjAALFAAAe9GJ0AbITAAD7Am50W4vEAAAiIQ==")
\ No newline at end of file
diff --git a/api/search.index/6d5153a571.js b/api/search.index/6d5153a571.js
new file mode 100644
index 000000000..6194e6665
--- /dev/null
+++ b/api/search.index/6d5153a571.js
@@ -0,0 +1 @@
+rn_("FQHFAAAWGyFmoBwVAcIAABa8ImSPIvsCaXQJAtAAACIHzQAAIZZlbaUCxgAAFhohGO0hYneeHHMAwILAwwAAG/DuCAwAAFUOAAC1DgAAMg8AADsPAABWHQAAoh4AANweAAAbIQAAWCEAAGghAABtIQAAliEAAN0hAABmIgAAIwAxAQkBCQA=")
\ No newline at end of file
diff --git a/api/search.index/6d657562ab.js b/api/search.index/6d657562ab.js
deleted file mode 100644
index 34e42e58c..000000000
--- a/api/search.index/6d657562ab.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHFAAAWFiFimhwFAsAAABT2IBzOIWN0JQHMAAAWwiJkWyKhIgFDibAbAAD7AmFm8wABdAHCCwAABQLAAAAW+SER+SAzcQcBhMAwYcIAACE8wQAAIPjEAAAhqMIAACE9KwLFAAAgWWN0G4nFAAAhBDcKAP0UgRfOAAAiFMsAACGpwgAAGtfHAAAgWgE9DwAA")
\ No newline at end of file
diff --git a/api/search.index/6d74ef77df.js b/api/search.index/6d74ef77df.js
new file mode 100644
index 000000000..99dd73223
--- /dev/null
+++ b/api/search.index/6d74ef77df.js
@@ -0,0 +1 @@
+rn_("FYTGAAARyB5kIAUDwAAAHIwhE8UaJz8glyBhb3IBTIpYIQAABQLAAADDjxwSjR1lbAUCwAAAFsceE9wbcnUFAsUAABZXIRRYImN0ocYAALYdzw7+RAU4As8AACIizgAAIqTHAAAfoQFFioUcAAChzwAAOyKh1AAAgCLzgQJncwUDwAAAEFciFrUdFSsdZXR3BQLDAAAcISIfWyJjZvubpQLBAAAVxh6gwxplc5YWBYzAAAAUoyEcdiIbAsQAAB20Y2T7iqUBwgAAFvMhdhwiE4IC4QAAImpuc/sCYXKhxgAAKR0FAsEAABiJIRgJIHd4FQHFAAAX5yFziCErAsIAAB6ibXQxxgAAxR4CIQMhocoAAFUhAYUDwwAAIQ7TAAAipscAACIAY2Vs+8AAxPMAgwG4IgAAAU+K3SEAAAkCzwAAIiDLAAAhVGRuBQLAAAAWoB8S2xtldAUCwgAAESgdoNkbaXP7AmVsGwLgAAA [...]
\ No newline at end of file
diff --git a/api/search.index/6d8af494d3.js b/api/search.index/6d8af494d3.js
deleted file mode 100644
index 7f2b6d8f1..000000000
--- a/api/search.index/6d8af494d3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQPAAAAW+SG13R0R+SAzZXF+ISHFAACUHKghIcEAAMEeSyIhxwAABCITIgUCwQAAHJAhE2YdbW4BRvo0HQAAAQB4AhAAWgAOAE0ApgCBAHMAdyYA/daJE8IAACE8wQAAIPgHV6h3JsIAACE9xwAAIevspQ4AAOgOAACnFgAAuRYAANIaAADaGgAA3xoAADkcAACcHAAASh0AAMsdAACGHgAAJiAAABYAAAARAQABBQHEAAAh+nLk3x4AAOUfAABuIAAADSEAAFIiAAAGAAA7wBIgwAAAFrE=")
\ No newline at end of file
diff --git a/api/search.index/6d8e9d0664.js b/api/search.index/6d8e9d0664.js
deleted file mode 100644
index 964ea877f..000000000
--- a/api/search.index/6d8e9d0664.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocIAAN4cBYbAAAARmRAaUyAFAsQAABf3IBl/IWNwAQEB4QAAFMNz6LEOAACQEAAAzhwAANwcAAAZHQAAIR0AABAfAABpIAAASyEAAAgREREQS8ACgcMAACI4xwAAH8AhxgAAWCJ0IhOCAtIAACJmZHUFAsEAABWNHhB/GmVzIcYAALcivSLzBAFk5c0eAADLHwAAFSIAADEiAACIIgAAliIAABEBABMFAsMAACKJY2yC/xoAAPuKFQLBAAAVKiITWyBmd1UZI4ICwwAAIixpbAWDwAAAE54W0PEO+wJydPsDYXJ1FQHBAAAWuyJkkiITjALDAAAiX21vBQLFAAAUDSAVdCBxc/uJpQHJAAAU9iFmnSIlAckAABaRImRAIDwiJQHMAAAWtSJk9SGCIiUBzAAAFrQiZPQhgSL7hecBAf0EMA7HAAAhkMIAAB6x4hoOAADtGgAA3RsAAAEANQHGAAATUiBm+xzsH+0fO47 [...]
\ No newline at end of file
diff --git a/api/search.index/6d93a4e07a.js b/api/search.index/6d93a4e07a.js
new file mode 100644
index 000000000..c4144ac24
--- /dev/null
+++ b/api/search.index/6d93a4e07a.js
@@ -0,0 +1 @@
+rn_("BQPGAAARUCIWhSIYlSJpc3QjhgLDAAAhxmNuFQHPAAAWvSJklCIVAckAABaTImQ+IhUBzAAAFrciZIQiFQHMAAAWtiJkgyL7hfOEwACG+5g=")
\ No newline at end of file
diff --git a/api/search.index/6e1bcb3630.js b/api/search.index/6e1bcb3630.js
new file mode 100644
index 000000000..d088aef30
--- /dev/null
+++ b/api/search.index/6e1bcb3630.js
@@ -0,0 +1 @@
+rn_("wcoAADIhockAAHMhJYTFAAAhRiC3IYceCCH7hhUDxgAAIZUgUCIWhSIYlSJpc3QOH6UBwQAApBIhbdYfEwQCwQAAIEVpcuRuHQAA7R4AADAgAABpIAAAxiEAABEAAPsCY27BxQAAgx4FAsMAAMPSHxWmH3Bz8wDDCGDy/A4AANcMFQHBAABEvyF+In8ipiJsWyL7AmN0")
\ No newline at end of file
diff --git a/api/search.index/6e5f106061.js b/api/search.index/6e5f106061.js
deleted file mode 100644
index 017a9f8d6..000000000
--- a/api/search.index/6e5f106061.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHSAAAWwiJkoSIVAdQAABbDImSoIhUBzwAAFsoiZMciFQHGAAAWwSJkoCJTjAPGAAAip2VscIcDhP0o0ATKAAAiUtMAACKmygAAIlM=")
\ No newline at end of file
diff --git a/api/search.index/6e8f6484ea.js b/api/search.index/6e8f6484ea.js
new file mode 100644
index 000000000..e2b533a39
--- /dev/null
+++ b/api/search.index/6e8f6484ea.js
@@ -0,0 +1 @@
+rn_("FQLDAAATMB0Vyh5ub0MiIcgAAF8dcyBBxgAAyxrGHQYgByAlAcAAABakHG1dDsoe1wQA/gIENAPGAAAcBsQAACHcxQAAGszyLQUAAKYV")
\ No newline at end of file
diff --git a/api/search.index/6eaa5d8fcd.js b/api/search.index/6eaa5d8fcd.js
new file mode 100644
index 000000000..937e979ba
--- /dev/null
+++ b/api/search.index/6eaa5d8fcd.js
@@ -0,0 +1 @@
+rn_("RQHDAACmwCJkQCBBIJkimiKhwwAAyQ4FAsAAABI5IRH5IXR68wCEAVMhAAAxwQAA2h/bHyUi8wECaXPl+RsAAHodAADMHgAAMSAAAIEgAACHIQAAAhAQ+wNlbnM=")
\ No newline at end of file
diff --git a/api/search.index/6ee482c942.js b/api/search.index/6ee482c942.js
deleted file mode 100644
index 30416c525..000000000
--- a/api/search.index/6ee482c942.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("pQHFAAAVISJjpiEVAckAABZqImLoIaODwgxAzwAAIpTgAAAdvxUByQAAFpoiZE8iE4TACEzJAAAiXMsAACJrxwAAIj37AmZsFQHaAAAWyCJksSL7gw==")
\ No newline at end of file
diff --git a/api/search.index/6f62dd80b7.js b/api/search.index/6f62dd80b7.js
deleted file mode 100644
index 474244676..000000000
--- a/api/search.index/6f62dd80b7.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("dQHFAAAY5yFn5BrlGuYa5xpYHFkcWhwbAuAAABrpY2dFwsGCIAAANPsg/CD+IaqOIiUbIEIhFRwg8xv0GwYdBx0jAALFAAAdZGRzAfULAAAxxAAAmx6KHysi+44=")
\ No newline at end of file
diff --git a/api/search.index/6f69cc19c6.js b/api/search.index/6f69cc19c6.js
new file mode 100644
index 000000000..75170cb73
--- /dev/null
+++ b/api/search.index/6f69cc19c6.js
@@ -0,0 +1 @@
+rn_("BQLAAAATASAQwBxhcwUCwwAApxoiok0hZHNTAMAIBsQAACBt0vQaAADcAQABwAAADrlw48YJAAC1CwAAoRAAAFkcAAABQKHWAACQIjHGAACqH0sg2yEFAsAAABI5IRH5IXR68wCEAVMhAAAxwQAA2h/bHyUi8wICaXPkeh0AAMweAAAxIAAAgSAAAIchAAAhAQAlAcwAABa+ImQxIpciFQHCAAASsiJtmyIjhwLHAAAiuGFrBQLAAACwyRAZpSJsd/cBAv0NFALgAAAgDeINDAAAYxkAALYhAAABACUBwgAAF6chbecb9RxDAf0CRQDCAAAejccAACAVyAAAIHiDYCAAAAEDAscAACKrwgAAHoxiZIlaGQAAtw0A/ZFRwMwAACKC4AAADijhAA8AAC4PAAAB")
\ No newline at end of file
diff --git a/api/search.index/6f70589b7b.js b/api/search.index/6f70589b7b.js
new file mode 100644
index 000000000..fe872ed7e
--- /dev/null
+++ b/api/search.index/6f70589b7b.js
@@ -0,0 +1 @@
+rn_("FQHBAACkEyBtih7zAoSCUB0AAKUBwQAApMAhbX0h8weE9UcgAAA8AAEANAGHAGsDxQAAH6hjb3BFhMMAABERIqQhKiI5Im0iE4gCwgAAIaVzdAUCwwAAJjchXiKk2B9tcwUCwAAAFdMeFqcfY2wlAcUAABacImRRIpYiE4PACETLAAAh6MIAACI1ocYAAIged1QA/eT4B8UAAB7UzwAAIenKAAAhlM0AACIDzQAAIgTCAAAbvDswAAABAABbABwAEQwEAK8OAAABDyoAtxYBACYcAACTHAAALB0AAGYdAADFHQAAkh4AANIeAAByIAAAVCEAAGIhAAD1IQAA/CEAAP4hAABAIgAAbiIAAJMiAACcIgIApyIAALAiAQC0IgMAuSIAALwiCQDIIgAAyiICAFUDwAAAFnsfJJsToBqq8B9hb3YGDLoOQw+ZG90cMcEAAO4hNiI3IhUBwAAAHi0icL8T84GK+wNhbHQ=")
\ No newline at end of file
diff --git a/api/search.index/7031cd07a5.js b/api/search.index/7031cd07a5.js
deleted file mode 100644
index 66b43450d..000000000
--- a/api/search.index/7031cd07a5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McUAAKEdoh0eIAEAAcUAACK8ZPtRDgAAAQA6DN8AIQMPAO8AFACNAgQAZgAbyCAgxAAAHUfBAAAfeBUBxgAAFmQiZsMhFQHFAAAW8CFiuB8VAcAAABQ4IWNXIPMDAnN3AcMfAAClAcMAABTJH2ZdIjHAAADwDm8bjh6lAcYAABQvIWZ5IgWDwAAApH4iVa4fXCBdIOchYyIVwMANAAAAFuAdGE0hFLke7w6nBwD9LGAGywAAIh/OAAAiWfPaCQAAHgv1CWcHAP00ABfIAAAfuccAACD0OzAAAAEAAEMAGAAcBQEAZQkBABoMAgCLDgEASQ8AAGoQAAB3EAAAfBAAAIQTAACvEwAA9RQAAHUVIgChFgAA2xoAADscAQA+HAMAHB0AAKgdAADMHQAAtx4BAM0fAAA1IQAAiyEAAFwiAAA=")
\ No newline at end of file
diff --git a/api/search.index/703e065a6e.js b/api/search.index/703e065a6e.js
deleted file mode 100644
index 71c38470d..000000000
--- a/api/search.index/703e065a6e.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("UcIAAP4buRy6HFMg9yABAwHFAAAgDnKJDhwAABsCzgAAIg5hchWQwwAAFPghwB3zBIjy0xoAAFABAQgBxQAAIZFyiQIfAAChyAAAzh/nAQDAhKTJAAAgcwFcHAAA+4Y=")
\ No newline at end of file
diff --git a/api/search.index/705a3c1d80.js b/api/search.index/705a3c1d80.js
deleted file mode 100644
index 7b631eed0..000000000
--- a/api/search.index/705a3c1d80.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUE7MAAAAQAA9QACAMoW9AB7GgAAQcIAANod2x0nIHcgFQHQAAAWpSJkZSIVAdIAABbGImStIhUBzwAAFr0iZJYiMwbCAgjTAAAiouQuHAAAgyAAAIAhAAClIQAAjiIAAHAAEKUBwAAAELAiNd4cFQHMAAAWmyJkUCIVAccAABZsImTGIfsCcnMxzQAAeCB5IAUia8QCBMEAACGp+/0ZQQg=")
\ No newline at end of file
diff --git a/api/search.index/705ff85fb2.js b/api/search.index/705ff85fb2.js
deleted file mode 100644
index 766bbd0c9..000000000
--- a/api/search.index/705ff85fb2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQLDAAAXDSIVyiFiZhgggCIVAcYAABX8IXIAIEHHAAC/H44hjyEOIvMDAmZs47MTAACYFQAAPSAAAJUgAAAGADWBxQAAFYwh8xrPG9Ab+wNhZnA=")
\ No newline at end of file
diff --git a/api/search.index/7076a0a234.js b/api/search.index/7076a0a234.js
new file mode 100644
index 000000000..948db43a3
--- /dev/null
+++ b/api/search.index/7076a0a234.js
@@ -0,0 +1 @@
+rn_("FQHKAAAW8yF2HCIFhsAAACWvHHIiJbAcDiAVgcUAABysIqEhI4ECyQAAIbVhczWEwAAAo1ccqxysHKIdUcIAAKcTqBO1GkUgOCKhxAAAEiETAQLgAAAatG1z5HsQAAD9FAAAth0AAKgfAADWHwAABRAQBQLAAAAVrhyiVRx1eQUCwAAAFC4gG6wiY3V3HwD+wECIG8sAACFyOzAAAAEAACoAEAAXDAIAcQ4SAIITAwDIFgEAghwAACEdAQBuHQEA7R4BADAgAABpIAAA+CAAAKEhAACvIQAAtSEAAMYhAAA6IgAAG4nBAAAgWw==")
\ No newline at end of file
diff --git a/api/search.index/71124000d3.js b/api/search.index/71124000d3.js
deleted file mode 100644
index 3b2081d42..000000000
--- a/api/search.index/71124000d3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ockAAHEhFYTFAAARtSEGIfuGMcUAAOse7B5nIPOFAnN2AUHh0xwAAHwgAABgGwLDAAAhkGlsGwLGAAAgemZ0JQHEAAAWtyJkFSKIIhOGAsMAACKJY2wrAscAACIsYXIrAsUAAB6xbXAVhMMAAKGDHZQde/0AOAjBAAAhxzHEAAB4IHkgBSIFAsAAALK+HhSNIWl0FQHGAAAQzx5yux0FAsAAAD9UInIicyI3HCGwIbEhYXJBwwAAOR3DHgAhASEVAcEAABZKInTgHacHAP00kAPJAAAiWcMAABuk6LYTAADeGgAADR0AABEgAAAiIAAAECEAAL4hAADpIQAATCIAABABEREQFQHIAAAWriJkbSIVAcoAABa/ImSYIhUBygAAFr4iZJci+4UVAcYAABacImRRIvOBA2VtbgGC/QkAGMYAACJB1AAAIrjBAAAhb8cAACJCKwLBAAAiAm9yIccAAAQiEyJjBAPFAAAgJWJ [...]
\ No newline at end of file
diff --git a/api/search.index/716b27fcb3.js b/api/search.index/716b27fcb3.js
new file mode 100644
index 000000000..00c51fb38
--- /dev/null
+++ b/api/search.index/716b27fcb3.js
@@ -0,0 +1 @@
+rn_("QcYAALQitSLCIsQi8wIBZOhKHQAAAR8AANIhAAAhIgAAWSIAAF0iAAB5IgAAoSIAAKMiAAAQEAAQACsCxQAAH39mdDWCxAAAFBQh/xvAHaUfIcAAAKYO6Q4hxgAAjCGrIrv9ZAEA4AAACcQVAcUAABYYIWKcHAUCwAAAFPggHNAhY3QFAsAAABb7IRH7IDNxBwGEwDBhwgAAIT7BAAAg+sQAACGqwgAAIT8rAsUAACBbY3QbicUAACEGFwUC/QSBF84AACIWywAAIavCAAAa2ccAACBcAT8PAADr/REASMIAAB0P")
\ No newline at end of file
diff --git a/api/search.index/7180c325f6.js b/api/search.index/7180c325f6.js
new file mode 100644
index 000000000..f3223a670
--- /dev/null
+++ b/api/search.index/7180c325f6.js
@@ -0,0 +1 @@
+rn_("ockAAHMhFYTFAAARtyEIIfuGMcUAAO0e7h5pIPOFAnN2AUHh1RwAAH4gAABgGwLDAAAhkmlsGwLGAAAgfGZ0JQHEAAAWuSJkFyKKIhOGAsMAACKLY2wrAscAACIuYXIrAsUAAB6zbXAVhMMAAKGFHZYde/0AOAjBAAAhyTHEAAB6IHsgByIFAsAAALLAHhSPIWl0FQHGAAAQ0R5yvR0FAsAAAD9WInQidSI3HiGyIbMhYXJBwwAAOx3FHgIhAyEVAcEAABZMInTiHacHAP00kAPJAAAiW8MAABum6LgTAADgGgAADx0AABMgAAAkIAAAEiEAAMAhAADrIQAATiIAABABEREQFQHIAAAWsCJkbyIVAcoAABbBImSaIhUBygAAFsAiZJki+4UVAcYAABaeImRTIvOBA2VtbgGC/QkAGMYAACJD1AAAIrrBAAAhcccAACJEKwLBAAAiBG9yIccAAAYiFSJjBAPFAAAgJ2J [...]
\ No newline at end of file
diff --git a/api/search.index/7219522374.js b/api/search.index/7219522374.js
deleted file mode 100644
index e5cda1eac..000000000
--- a/api/search.index/7219522374.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcIAAB4dRyIxwQAAHCGwIbEhIcEAAKIaOh0BgQLMAAAiNtIAACJ2YXCnAQL9NEEAxAAAHZTGAAAf9PRLDwAAMA0wAS0B+wJlcw==")
\ No newline at end of file
diff --git a/api/search.index/72268e9eda.js b/api/search.index/72268e9eda.js
deleted file mode 100644
index 7f633295c..000000000
--- a/api/search.index/72268e9eda.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQLJAAAXDSIVyiFiZhgggCLFAsAAACc+IR4iEHEbZnOBGjHNAAC4IbkhZiLzgQJkchUBxQAAFmchYj8dBQLBAAASQB0SPh1idPMAAXTilBMAANYUAADGHAAAAQAhxQAAPR2cHkXCwoIgAAA0+yD8IP4hqo4iJRsgQiEVHCDzG/QbBh0HHSuGwwAAHpsxwwAA8hsFHQ4hFQLEAAAfpCKi3B5jcpscBYnAAAAzhR2GHQwhGXog9xwC/TSYE8YAAB7ewgAAHQjicxAAALUQAAABHAAAEAD7A2VpdA==")
\ No newline at end of file
diff --git a/api/search.index/725d5d5a36.js b/api/search.index/725d5d5a36.js
new file mode 100644
index 000000000..74b86a0ac
--- /dev/null
+++ b/api/search.index/725d5d5a36.js
@@ -0,0 +1 @@
+rn_("McAAAFIc/x8AIKHGAABCITHFAAB6IHsgByLTAMAKSMMAABz05TgcAACfHgAA8h4AAOQfAAA0IAAAiyAAAAAQVbHGAABgIDvBAoDgAAAQkQ==")
\ No newline at end of file
diff --git a/api/search.index/726db216da.js b/api/search.index/726db216da.js
deleted file mode 100644
index 9214db6df..000000000
--- a/api/search.index/726db216da.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BYPBAAAS0hwV/h4Fg8EAABLRHBX9Hmv8DgDgAAAQhCHEAAASIXMh8wGCOjAAAAEAAAAAAEIAEAAAAMoOyw7MDs0Ozg7PDtAO0Q7SDtMO1A7VDtYO1w7YDtkO2g7bDtwO3Q7eDt8O4A7hDuIO4w7kDuUO5g79GygcKRwqHJgcrBw0HTUdlR2WHb4d7h7yHqMfqx+tH70fCiAPIBcgJSByIIUgFiEYIRohGyEjIWIhZyGJIZkhtyHwIQwiRSJqIm8ikwAExAAAIfPFAAAc0GVydXaY8gkAAA==")
\ No newline at end of file
diff --git a/api/search.index/7311c6f0c4.js b/api/search.index/7311c6f0c4.js
new file mode 100644
index 000000000..6d3a9699c
--- /dev/null
+++ b/api/search.index/7311c6f0c4.js
@@ -0,0 +1 @@
+rn_("FYHHAAAVmiFnIPMAiOGZGgAAlB4AAAgFAsEAABSTISW0H2chcXMFAssAABR9IhWIInFzocQAAEMdAUWJgB8AABUB0QAAFssiZLsi5w4A/RmhA8sAACGXxgAAH7PqvA4AAIcTAACZEwAAvBMAANoUAAD+HAAAcR0AAAQfAACXHwAAzB8AANgfAAAAEDiIgBA=")
\ No newline at end of file
diff --git a/api/search.index/732093d156.js b/api/search.index/732093d156.js
deleted file mode 100644
index d86975d6d..000000000
--- a/api/search.index/732093d156.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JYTCAAATaCG/FLAfRQHFAAAVISJjpiGnIa4hryE1hMUAABcTIeMb7hzvHGUCwAAAFK0h5OgcY3SvDioPvx3IHf0e/h7hxQAA4hwlAcUAACZqIm8iYugh7SGlAcEAABR9IWaEIqUBwgAAFKQhZooi+4kxxQAA0x5GIEcg8wPCAAnz0x0AALgBCAIVAcIAABSUIGPfHyOBAsEAABzwZWwjAAPOAAAilMcAACBIZWZy864OAABYEwIA5wcAww5IxAAAHOHh+QsAACgOAAAHm/0QQUDJAAAgEMMAACJH")
\ No newline at end of file
diff --git a/api/search.index/7369b134d3.js b/api/search.index/7369b134d3.js
deleted file mode 100644
index d026eded8..000000000
--- a/api/search.index/7369b134d3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("scYAACUcpYLIAAAUzCEqICHGAACQHlIhM4IDwwAAHTtkaXLzAAJpczswAAABAACVAQQAZwf0AJoJAACVHAAA4R2eAKWCywAAFMwhKiDzAYQ7MAAAAQAAnwACAJUcAADhHZ4AxQLAAAAZuR8VHiBjdz4c+wJnaTHPAAC4IbkhZiIVAcUAABZnIWI/HQUCwQAAEkAdEj4dYnTzAAF04pQTAADWFAAAxhwAAAEAIcUAAD0dnB5FwsKCIAAANPsg/CD+IaqOIiUbIEIhFRwg8xv0GwYdBx0rhsMAAB6bMcMAAPIbBR0OIRUCxAAAH6QiotweY3KbHAWJwAAAM4Udhh0MIRl6IPccAv00mBPGAAAe3sIAAB0I4nMQAAC1EAAAARwAABAA+4ahxAAATCITAALgAAAiqm1z6bUaAAC+GgAAwBwAAIMdAAC8HgAAxh4AAOEfAABEIAAAtSEAADAiAAABEQAAAPvADIQ=")
\ No newline at end of file
diff --git a/api/search.index/73de37428a.js b/api/search.index/73de37428a.js
new file mode 100644
index 000000000..37fef7e80
--- /dev/null
+++ b/api/search.index/73de37428a.js
@@ -0,0 +1 @@
+rn_("BQLAAAAnBSIUIhMDImVwJQHPAAAWzCJkriLJIiUBxwAAGGUiZ2MiqSIlAcYAABbDImRcIqIi84IDZWxw84ODFQHGAAAgfSDEIXIfIPMEAXAB3xoAAPsCY3M=")
\ No newline at end of file
diff --git a/api/search.index/73f942d5f3.js b/api/search.index/73f942d5f3.js
deleted file mode 100644
index 744799884..000000000
--- a/api/search.index/73f942d5f3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUU7MAAAAQAAGAECAKIWAQBjGRYBpQHDAAAwUBz9H/4fc/AexQHAAAAUoCFi0hDzgQJkbfsCcnYBAQHCAAAdwWL5uw4AAJIAiQs3BQEAFgD5AHQA6gABBwHDAAAikGbnqh4AAP8gAAA0IQAAOyEAAD8hAABDIQAAJiIAAMQiAABgAAABGwLFAAAgWGN0O8AAxD9MRlR1QcEAAIsQPRyCIfghscIAABccpQHFAAAVISJjpiEVAckAABZqImLoIVOFwghA4AAAHb/zggJkafOBAml0+4c=")
\ No newline at end of file
diff --git a/api/search.index/741bde3c4d.js b/api/search.index/741bde3c4d.js
deleted file mode 100644
index f789a5109..000000000
--- a/api/search.index/741bde3c4d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLBAAAUeyIVhiJxcyMBA8QAACGdwgAAHqZhcnY7MAAAAQAAJgARALIWAACjGg0AsBwDAKMdAQDNHQAAjR4AAMQeAADjHgMA8x4AAJEfAQD1HwEAASAAAH4gAAB2IQAAfyEAANIhAADYIQAA")
\ No newline at end of file
diff --git a/api/search.index/74657e726c.js b/api/search.index/74657e726c.js
new file mode 100644
index 000000000..a4696e085
--- /dev/null
+++ b/api/search.index/74657e726c.js
@@ -0,0 +1 @@
+rn_("pQHFAACmbSFmRh2lAcAAAKRDIHPIGicBAP0SAwTFAAAgEcIAAB8NwgAAIRbmqRAAANEQAADPGgAABRsAACIgAAAFIQAACSEAAAIAEAA=")
\ No newline at end of file
diff --git a/api/search.index/74cb3d46fc.js b/api/search.index/74cb3d46fc.js
new file mode 100644
index 000000000..b372ab07a
--- /dev/null
+++ b/api/search.index/74cb3d46fc.js
@@ -0,0 +1 @@
+rn_("ocMAALUeIcMAALQeGCIFjMAAACJVHcohKdUhiSLjAP0hgQDEAAAhoOq9GgAAthwAAKcdAADpHgAA+R8AAAQgAABJIQAAnSEAAP0hAAAMIgAASCIAAAEREQEBACOCAsIAAB2sZnMrAskAACBoZnQ=")
\ No newline at end of file
diff --git a/api/search.index/74dceee5b4.js b/api/search.index/74dceee5b4.js
new file mode 100644
index 000000000..24d428b27
--- /dev/null
+++ b/api/search.index/74dceee5b4.js
@@ -0,0 +1 @@
+rn_("FQHAAABEvyF+In8ipiJsWyIVAcIAABKyIm2bIiOFAscAACK4YWsVAcUAAES/IX4ifyKmImxbIvsCcnNBwwAAwR+QIZEhECIxxgAAqh9LINshBQLAAAASOSER+SF0evMAhAFTIQAAMcEAANof2x8lIvMCAmlz5HodAADMHgAAMSAAAIEgAACHIQAAIQEAJQHMAAAWviJkMSKXIiGHAscAACK4CmFr5wEC/Q0UAMkAACKl4WMZAAC2IQAAECUBwgAAF6chbecb9RxDAf0CRQDCAAAejccAACAVyAAAIHiDYCAAADMDA9UAACKRZWltgi4PAAAxxAAATh1PHVchBQLAAAAS3xscLCJtcCHGAAC5Ir8i8wABZOXPHgAAzR8AABciAAAzIgAAiiIAAJgiAAARAQDzAQFjATQOAAD7wAQGJQHGAAAWwSJkQSCaIgUCxAAAGE8hFLseZGZTAAPGAAAhB2FzdfX1CwAAAQAjArg [...]
\ No newline at end of file
diff --git a/api/search.index/754c1412c6.js b/api/search.index/754c1412c6.js
deleted file mode 100644
index c402d1cdf..000000000
--- a/api/search.index/754c1412c6.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHHAAAUvSFsWSIbAsIAAByCY3QrAsoAACJYbW6xxAAA1BsFwMAAyAAAFSUdqgohFsEe2/2BSAHLAAAhUMcAAB7C")
\ No newline at end of file
diff --git a/api/search.index/7579c2d106.js b/api/search.index/7579c2d106.js
new file mode 100644
index 000000000..537f0424a
--- /dev/null
+++ b/api/search.index/7579c2d106.js
@@ -0,0 +1 @@
+rn_("ocUAAP4aMcgAAGcdDCENIRUBygAAFq0iY2kiAUk7MAAAAQAAtQACABQfWgCbIFoAvwH+AEJAMcoAACE2ygAAIFk=")
\ No newline at end of file
diff --git a/api/search.index/761d02d980.js b/api/search.index/761d02d980.js
deleted file mode 100644
index a95d92f14..000000000
--- a/api/search.index/761d02d980.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("oc0AANQhocIAAPobZQHBAACkviFtEh0THRQdFR17IXwhFYLFAAAUcyHuHhsCwQAAH491eeME/QMBA8QAACGYwwAAH5DorhMAALYaAADeGwAAXB0AAEUgAABlIAAAgSAAALYhAAA9IgAAAxAAEAAFAsAAACOtE8UeFMohaXIVAcIAAB9WInfAFCUCwAAAFLEdFLUeb3SYGxQg+wJkc8cDAP06QALGAAAiDccAABy25Y0JAADRHgAApR8AABggAAABIgAAgCIAAAEAEA==")
\ No newline at end of file
diff --git a/api/search.index/7665ee5397.js b/api/search.index/7665ee5397.js
new file mode 100644
index 000000000..aa05cd171
--- /dev/null
+++ b/api/search.index/7665ee5397.js
@@ -0,0 +1 @@
+rn_("ocMAALUeIcMAALQeGCIFjMAAACJVHcohKdUhiSLjAP0hgQDEAAAhoOq9GgAAthwAAKcdAADpHgAA+R8AAAQgAABJIQAAnSEAAP0hAAAMIgAASCIAAAEREQEBAEMA/SEABsEAABwGwgAAHazDAAAa7gGYGwAA")
\ No newline at end of file
diff --git a/api/search.index/76991beaf0.js b/api/search.index/76991beaf0.js
new file mode 100644
index 000000000..6f945bdfd
--- /dev/null
+++ b/api/search.index/76991beaf0.js
@@ -0,0 +1 @@
+rn_("FQHBAAAWvSJklCIThgLDAAAiYW1vFQHMAAAWZiJmxSEbmMEAACH+IcgAACsglyHbBMkAACGiYXFzdBuKwgAAHT0=")
\ No newline at end of file
diff --git a/api/search.index/76a194d7c1.js b/api/search.index/76a194d7c1.js
new file mode 100644
index 000000000..9b4b133e0
--- /dev/null
+++ b/api/search.index/76a194d7c1.js
@@ -0,0 +1 @@
+rn_("FQHBAAAZYyBzYA5VAcQAABdvIGztISQiJyI9IkQiAUD4pxMAAAEADQeHAZgBHQFUAfMBAUA7MAAAAQAAIwACAKwWAAB1GyIA8wDALASF8w4AAA==")
\ No newline at end of file
diff --git a/api/search.index/76d6c9b3d0.js b/api/search.index/76d6c9b3d0.js
deleted file mode 100644
index 890ee8bb2..000000000
--- a/api/search.index/76d6c9b3d0.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHHAACoaCJ3AiExwAAAtxa4FuQbpYLEAAAUzCEqIAUCxgAAF3EiFUciZnT7AmFmIcIAAA4diR7zAf0JAAU7MAAAAQAAfQEGAKkTAgADFWQAzxoBAAQbXQASH1oAmSBaAA==")
\ No newline at end of file
diff --git a/api/search.index/7763a881d0.js b/api/search.index/7763a881d0.js
new file mode 100644
index 000000000..3b67dcde0
--- /dev/null
+++ b/api/search.index/7763a881d0.js
@@ -0,0 +1 @@
+rn_("BYbAAAAV+RqpMR0VAcsAABAzIHPGHwX9wATgAAAAZIITgxOEE4UTyBbJFjbGGscaBBw34BvhG14dop8OpQHEAAAQLyFziSATiALCAAAgMmZzpQHGAACkLSFiXB0VAcUAABDIHHMDHPOBAm5zocMAAIEQMcsAAMwezR4xIAWJwAAAEo0iEYci8wMBcPLVHQAAuAEjgwLgAAAiCmRmZQHEAAAcKiJwkxxAIp4iwyLKIssiFQHDAACk9x5jyhYVAcQAABTHH2ORHmMAwAxgxwAAHvbIAAAfyPK1CQAA+Qz/AMQMBckAAB/FCQLQAAAiKsYAAB3VZmwrg8YAAB1bBZjAAAAkgRPHFhswIEUBwAAAFxkiZlsd9h5mIE8h8wYBc+EMHQAASiEAAAL3fQD+QE8kDc8AACF4Ab4BAAA=")
\ No newline at end of file
diff --git a/api/search.index/7764859d86.js b/api/search.index/7764859d86.js
new file mode 100644
index 000000000..b83d83cb7
--- /dev/null
+++ b/api/search.index/7764859d86.js
@@ -0,0 +1 @@
+rn_("QcgAACQiJyI9IkQiQcIAABchJCFmIXEhBQLAAAAcqyIdgiJhaAccgv0fAB7GAAAiQ8cAACJGxwAAIk3UAAAiuskAACKOywAAInIrAsEAACIEb3I=")
\ No newline at end of file
diff --git a/api/search.index/777d2275c2.js b/api/search.index/777d2275c2.js
deleted file mode 100644
index 7a89b3d9a..000000000
--- a/api/search.index/777d2275c2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocQAAKEeJQHIAAAWsyJk0SF4IiUBxgAAFq8iZKwhbiLzAIj5RQ8AAIQL2QEiAeQBXAABAEQAkAElAc8AABbKImSsIscidQHAAAAmbCKbImSHHYgdiR39IP4gxiFQIjHIAAB4IHkgBSL7AmVzRQHHAAAYYyJnYCJhIqYipyIBRuVUHQAAGSEAAFYhAABmIQAAayEAAGQiAAAQkBAlAcYAABbBImRaIqAiFQHGAAAQByFzvh8jgQLBAAAcXGFkocQAALcc+wJvcvc9AP002AfFAAAhzue/DgAARg8AAFcPAACeHAAAPB0AAEQdAADDIQAAYiIAABEAAQATAALBAAAOwmVsgroBAAA=")
\ No newline at end of file
diff --git a/api/search.index/778fd1bf97.js b/api/search.index/778fd1bf97.js
new file mode 100644
index 000000000..44cdddd20
--- /dev/null
+++ b/api/search.index/778fd1bf97.js
@@ -0,0 +1 @@
+rn_("oc0AANYhocIAAPwbZQHBAACkwCFtFB0VHRYdFx19IX4hFYLFAAAUdSHwHhsCwQAAH5F1eeME/QMBA8QAACGawwAAH5LosBMAALgaAADgGwAAXh0AAEcgAABnIAAAgyAAALghAAA/IgAAAxAAEAAFAsAAACOvE8ceFMwhaXIVAcIAAB9YInfCFCUCwAAAFLMdFLceb3SaGxYg+wJkc8cDAP06QALGAAAiD8cAABy45Y0JAADTHgAApx8AABogAAADIgAAgiIAAAEAEA==")
\ No newline at end of file
diff --git a/api/search.index/77a90466fc.js b/api/search.index/77a90466fc.js
new file mode 100644
index 000000000..8eff6b28e
--- /dev/null
+++ b/api/search.index/77a90466fc.js
@@ -0,0 +1 @@
+rn_("BQLAAAAXcx8T1B5lcBUBxQAAF+chc4ghKwLCAAAeom10McYAAMUeAiEDIaHKAABVIQGEA8MAACEO0wAAIqbHAAAiAGNlbEHDAADLGsYdBiAHIPuF+8AAxPMAA2FlcwG4IgAA")
\ No newline at end of file
diff --git a/api/search.index/77bd224d45.js b/api/search.index/77bd224d45.js
deleted file mode 100644
index c7df97da6..000000000
--- a/api/search.index/77bd224d45.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQPAAAAViCEeECIomCDBIWVpbaHFAADvGhWEwwAAE2ghsB8FAsMAABqMIh2pImV0IwQCxQAAIZlicAHLHQAAFQHAAAAW8h5isBPzgQJudBMAAsYAACAZY3LhmhsAAPkhAACABQLAAAAUdCASwx1wdQWGwQAAQg0gDiAkIB0hpvAe84ECcXNRyQAAzR2RH5IffyHYIQUCxAAAISMhtyEV8yFlchMHAsEAAB7vYnLhuxwAAK4dAAAQocQAAL4WAUSJXhwAACHJAAA2IckhW8QCBMoAACB1QcYAAD4inCLBIsgiIwACwQAAHophZOqAGgAA/hoAAH0gAAAcIgAAOSIAAFEiAABaIgAAdSIAAH4iAACgIgAAsSIAAAABEAAQADHGAAC5HLoc9yAFAsAAAKPtGkeWIJcgmiHAIW1uawPCAAAc8WFvcgUCwQAAJoohqSIU/RtjaQEA/sBvrB/LAAAgKS49fjqrSGgmXt1OI35 [...]
\ No newline at end of file
diff --git a/api/search.index/77e289ff40.js b/api/search.index/77e289ff40.js
new file mode 100644
index 000000000..d25d1a048
--- /dev/null
+++ b/api/search.index/77e289ff40.js
@@ -0,0 +1 @@
+rn_("oc0AANYhFQHBAAAUtx50FiDzggJlcwEBAc8AACGOdIvkCQAAUcIAAN0aPRw+HDchXiIVAcUAAKB7HHPUGzWBwQAAFdge7wskDGYbBQLAAAAU2xoS3Rtma/vABCT/AP0QSUDgAAAMGg==")
\ No newline at end of file
diff --git a/api/search.index/77ed74eba7.js b/api/search.index/77ed74eba7.js
new file mode 100644
index 000000000..82c38df99
--- /dev/null
+++ b/api/search.index/77ed74eba7.js
@@ -0,0 +1 @@
+rn_("AQL9AgMCwwAAHbLGAAAd0MIAAB0fyAAAH8I7MAAAAQAAAgECAMYOAACDEQEBFQLDAAAhfx8sIRMcIGlu1hRb/QBBCcoAACHHwwAAE7Y=")
\ No newline at end of file
diff --git a/api/search.index/7857542935.js b/api/search.index/7857542935.js
deleted file mode 100644
index 6850d412d..000000000
--- a/api/search.index/7857542935.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("IcQAAMwaBxwlAc8AABbKImSsIsciRQHHAAAYYyJnYCJhIqYipyIBRuVUHQAAGSEAAFYhAABmIQAAayEAAGQiAAAQkBAlAcYAABbBImRaIqAiFQHIAAAQByFzvh+hxAAAtxz7Am9y9wIB/TTIAMUAACHO5b8OAABXDwAAnhwAADwdAABEHQAAwyEAABAAEPsCZ3M=")
\ No newline at end of file
diff --git a/api/search.index/78a53b31ca.js b/api/search.index/78a53b31ca.js
deleted file mode 100644
index d210e94e9..000000000
--- a/api/search.index/78a53b31ca.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AULiSyAAAHchAAARIgAAYgArAsAAAB0jaXQVAsMAABZFIhLLIWJyJCEjiALDAAAhdWZzFQHEAAAQMSBzxB/zAwJmcOIrHAAA0BwAAIkfAAAQAC8B/QBIScUAAB2owwAAGtjEAAAe8g==")
\ No newline at end of file
diff --git a/api/search.index/78ed0e37e2.js b/api/search.index/78ed0e37e2.js
deleted file mode 100644
index 91fb7e7c5..000000000
--- a/api/search.index/78ed0e37e2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BYnEAAA47CE0IjUiFHYiG4PFAAAgEAUDwAAAExQiFPMfYpIdkx2jIbghuSFmImVveSUBygAAFsMiZEgiqCIhwwAAzR+LIQWMwAAAEsghGYciEwcCwgAAIhZmaeRHIQAAmyEAAPshAAAKIgAARiIAAAEBAPsCYXIxxQAAVCJyInMiNYTAAAATRiEeIR8hsiExwgAA4B7hHsshQcEAAPAf8R/yHw8iBQLAAAAlGyFFIhJFIXV58wH9AgED6KYcAACNHQAAlB8AADAgAAAkIQAAoiEAACgiAAA3IgAAayIAAAQAAAAA+wJlbPMAA3B0dfagGgAABwQBAM4AlQB7AAWDwAAANagfSSDZIRX9IQUCwAAAEjchEfchdHrzAIQBUSEAADHBAADYH9kfIyLzAgJpc+X3GwAAeB0AAMoeAAAvIAAAfyAAAIUhAAACEBDFAcEAABUeIHc+HCUBwAAApEwibeEfMCL7AmRuUcgAAK4 [...]
\ No newline at end of file
diff --git a/api/search.index/79012f8769.js b/api/search.index/79012f8769.js
new file mode 100644
index 000000000..3e0aa50ce
--- /dev/null
+++ b/api/search.index/79012f8769.js
@@ -0,0 +1 @@
+rn_("AQD9ABUBwgAAE43CAAATjsMAABamxgAAHJntxwkAALgLAACqEwAAtxMAAJsWAACxFgAA+BsAAKccAADQHQAA0h0AAMIfAAAUIQAAdSEAAM4hAACgAAEAAQAA")
\ No newline at end of file
diff --git a/api/search.index/79344cf753.js b/api/search.index/79344cf753.js
deleted file mode 100644
index 2529ffe6c..000000000
--- a/api/search.index/79344cf753.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AUWKgxwAAKHPAAA5IqHUAAB+IvOBAmdzJQLLAAAXDSIVyiFiZhgggCIVAcQAACApHc8ecrsdSwPgAAAiVcUAAB2zZXR3BQLDAAAcHyIfWSJjZvuf")
\ No newline at end of file
diff --git a/api/search.index/7958fcf126.js b/api/search.index/7958fcf126.js
deleted file mode 100644
index b0f14b95a..000000000
--- a/api/search.index/7958fcf126.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BYbAAAAV9xqpLx0VAcsAABAxIHPEHwX9wATgAAAAZIATgROCE4MTxhbHFjbEGsUaAhw33hvfG1wdop0OpQHEAAAQLSFzhyATiALCAAAgMGZzpQHGAACkKyFiWh0VAcUAABDGHHMBHPOBAm5zocMAAH8QMcsAAMoeyx4vIAWJwAAAEosiEYUi8wMBcPLTHQAAuAEjgwLgAAAiCGRmZQHEAAAcKCJwkRw+IpwiwSLIIskiFQHDAACk9R5jyBYVAcQAABTFH2OPHmMAwAxgxwAAHvTIAAAfxvKzCQAA+Qz/AMQMBckAAB/DCQLQAAAiKMYAAB3TZmwrg8YAAB1ZBZjAAAAkfxPFFhsuIEUBwAAAFxciZlkd9B5kIE0h8wYBc+EKHQAASCEAAAL3fQD+QE8kDc8AACF2Ab4BAAA=")
\ No newline at end of file
diff --git a/api/search.index/79e56de280.js b/api/search.index/79e56de280.js
new file mode 100644
index 000000000..6f9be9469
--- /dev/null
+++ b/api/search.index/79e56de280.js
@@ -0,0 +1 @@
+rn_("BQLAAAASOSFRqBCYFlUhViH5IXR6IcQAAMQfbCHzAIYBUyEAAKHGAACgHgEGAdMAACKkd+QwHAAAhSAAAIIhAACnIQAAkCIAAHAAEDHOAAB6IHsgByJb/ABkwAAAIrJFAcUAABa+ImSOGo4eMSKXIgFB51EOAADEHAAA6x4AAKMfAAC1HwAA2h8AACUiAAClIgAAEwABAKHJAADWIRUBxAAAExwgbtYUocQAAC0hlz8A/XaZAsMAABTVxQAAHp86MAAAAQAAAAAALgAQAAAApgQ4D30TfhOpE7UWvhq/Gvga3RvnG+4b7xv5GyIcIxzJHMocyxzMHM0czhz1HFwdXR1gHWEdYh1jHWQdZR16HXsdfB3JHswezR78H/0f/h8xIIEggiAjIWMhhyGbIg==")
\ No newline at end of file
diff --git a/api/search.index/7a0cb5e354.js b/api/search.index/7a0cb5e354.js
deleted file mode 100644
index 873dd2fcb..000000000
--- a/api/search.index/7a0cb5e354.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("ocIAAN4cBYbAAAARmRAaUyAFAsQAABf3IBl/IWNwAQEB4QAAFMNz6LEOAACQEAAAzhwAANwcAAAZHQAAIR0AABAfAABpIAAASyEAAAgREREQS8ACgcMAACI4xwAAH8AFAsMAABWNHhB/GmVzNQHHAAATUiBm+xzsH+0fIcMAAB0dcSKlgcIAABPrG8EUS8AChMoAACD2xQAAHc6hxwAACCEFAsEAALZeIBCPEGN2QccAANYh1yEYIhkiAQD+wOYlT8IAACIXwwAAHbBJlJkeXF9Z4hARBB0g/+dAW/lZ4lzSJduDxwAAHowrOALSyVdv82ZTD238A6IJpkUIrMUAAB+JbcZxClhIBwd9ADswAAABAAAhAgYAEwUAADoGGwHEDgAAZBAAAIERAQHyFAAA")
\ No newline at end of file
diff --git a/api/search.index/7a5316af21.js b/api/search.index/7a5316af21.js
deleted file mode 100644
index a55996bff..000000000
--- a/api/search.index/7a5316af21.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("McUAAKEdoh0eIAUCwAAAFUcdEngfcnkVAcYAABZkImbDIRUBxQAAFvAhYrgfFQHAAAAUOCFjVyDzAwJzdwHDHwAAocYAAH4iZwcA/TQAF8gAAB+5xwAAIPQ7MAAAAQAAPwAWABoMAgCLDgEASQ8AAGoQAAB3EAAAfBAAAIQTAACvEwAA9RQAAHUVIgChFgAA2xoAADscAQA+HAMAHB0AAKgdAADMHQAAtx4BAM0fAAA1IQAAiyEAAFwiAAA=")
\ No newline at end of file
diff --git a/api/search.index/7ae77ae57d.js b/api/search.index/7ae77ae57d.js
deleted file mode 100644
index 49a8acf1b..000000000
--- a/api/search.index/7ae77ae57d.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("JQHEAAAWwyJkSCKoIiHJAADPHcweYwADxwAAIfJjZWzp3QkAAO4LAAAfDQAAwQ4AAFgPAACkEAAAzhQAAOcbAACOHwAAgyIAABMQIAAA")
\ No newline at end of file
diff --git a/api/search.index/7af2e682b3.js b/api/search.index/7af2e682b3.js
new file mode 100644
index 000000000..dff680108
--- /dev/null
+++ b/api/search.index/7af2e682b3.js
@@ -0,0 +1 @@
+rn_("JQHIAAAWxSJkSiKqIisCxgAAHoJlbRvAACrFAAAgFskAAB/cQcMAALkeuh7PH40hBYzAAAASyiEZiSITBwLCAAAiGGZp5EkhAACdIQAA/SEAAAwiAABIIgAAAQEA+wJhciUCwgAAFw8iFcwhYmYaIIIiMcUAAFYidCJ1IjWEwAAAE0ghICEhIbQhMcIAAOIe4x7NIUHBAADyH/Mf9B8RIgUCwAAAJR0hRyISRyF1efcAAf0CAQfiAAAPQOioHAAAjx0AAJYfAAAyIAAAJiEAAKQhAAAqIgAAOSIAAG0iAAAEAAAAAPsDZWxvFYjEAAAUsx2aGzUBywAAFqciZIUhhiFnIisC4AAAHA1ucBuRwQAAHN0VAcIAABbIImSvIsUBwQAAoAscczIhZcDDA0AAAKRKHRatIhXOHQMVBBVnHQwhDSFpIvsCdHoVAcYAABX+IXICIEHHAADBH5AhkSEQIvMDAmZs47UTAACaFQA [...]
\ No newline at end of file
diff --git a/api/search.index/7b03e987b5.js b/api/search.index/7b03e987b5.js
deleted file mode 100644
index a8a4f8710..000000000
--- a/api/search.index/7b03e987b5.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("AQD9ABUBwgAAE4vCAAATjMMAABakxgAAHJftxQkAALYLAACoEwAAtRMAAJkWAACvFgAA9hsAAKUcAADOHQAA0B0AAMAfAAASIQAAcyEAAMwhAACgAAEAAQAA")
\ No newline at end of file
diff --git a/api/search.index/7b30feeee3.js b/api/search.index/7b30feeee3.js
deleted file mode 100644
index 609e86fb8..000000000
--- a/api/search.index/7b30feeee3.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FQHBAAAWuyJkkiITjALDAAAiX21vBQLFAAAUDSAVdCBxc/uJpQHJAAAU9iFmnSIlAckAABaRImRAIDwiJQHMAAAWtSJk9SGCIiUBzAAAFrQiZPQhgSL7hQUCwAAAFykiMqccqBzIH295IcYAAOIeLiHzAgJsdOKhEwAA7hQAAC0cAAATADWBwQAAI+sb2R7BFMIUcCEhxgAAryLDIucPAP0cMQ7HAAAhkMIAAB6x/BoOAADTDAEA7wDPBREAiwAmAA4AAQAnAAQA")
\ No newline at end of file
diff --git a/api/search.index/7b751cf359.js b/api/search.index/7b751cf359.js
new file mode 100644
index 000000000..7fce3a3f0
--- /dev/null
+++ b/api/search.index/7b751cf359.js
@@ -0,0 +1 @@
+rn_("JQHKAAAWtCJk0iF5IhsCxQAAHLhjcgUCwAAAN4MghCC4IaJQHW9wIwUCywAAIjlwc/RiIQAAOgEVABQAYwADxQAAHJNkZWkBLAUAAA==")
\ No newline at end of file
diff --git a/api/search.index/7bdfc5928c.js b/api/search.index/7bdfc5928c.js
deleted file mode 100644
index 8dc5385a6..000000000
--- a/api/search.index/7bdfc5928c.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("scIAABccpQHFAAAVISJjpiEVAckAABZqImLoIVOFwghA4AAAHb/zgQJkaRWEwQAAp9AdmRsTAALgAAAgWGFz9aUQAAApCpUAdwRKAiHBAADAGnsdvwD+QAIQisgAACFpwAAAEJ521smz0A==")
\ No newline at end of file
diff --git a/api/search.index/7bed97b412.js b/api/search.index/7bed97b412.js
deleted file mode 100644
index 8a99de526..000000000
--- a/api/search.index/7bed97b412.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("NQHAAABDuhbMG6Ecox53iBpoImkiAQICxgAAHcbFAAAh8WF25fgcAACsHQAAnh4AAOMfAABAIQAAGiIAABEREQWJxQAAOOwhNCI1IhR2IgUCwAAAFPMfYpIdkx2jIbghuSFmIm95JQHKAAAWwyJkSCKoIgWMwAAAEsghGYciEwgCwgAAIhZmaeRHIQAAmyEAAPshAAAKIgAARiIAAAEBADHFAABUInIicyI1hMAAABNGIR4hHyGyITHCAADgHuEeyyFBwQAA8B/xH/IfDyIFAsAAACUbIUUiEkUhdXnzAf0CAQPophwAAI0dAACUHwAAMCAAACQhAACiIQAAKCIAADciAABrIgAABAAAAAD7AmVs8wADcHR1AaAaAADFAcEAABUeIHc+HCUBwAAApEwibeEfMCL7AmRuVQHEAAAQLSFzRh2kHocgiCB1ITHFAACEIE4hTyElAcQAABbKImSsIsci8wECcHcBeh8AAOc [...]
\ No newline at end of file
diff --git a/api/search.index/7bfaef2214.js b/api/search.index/7bfaef2214.js
deleted file mode 100644
index 2a50ffaaf..000000000
--- a/api/search.index/7bfaef2214.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcgAACIiJSI7IkIiQcIAABUhIiFkIW8hAQMCxwAAIqnCAAAeimJkiVgZAAAbA8wAACKAwgAAIAthaGlVAcAAABtwImPFC8YLfxrBGsIaAUiJbx0AABUB0QAAFroiZI0iFQHYAAAWySJkuSIVAdAAABbAImSfIhUByAAAFrMiZHgiFQHHAAAWryJkbiLzgwJycxUBzAAAFrIiZHciFQHEAAAWtyJkiCITiQLDAAAiiWNsFQHIAAAWriJkbSIVAcoAABa/ImSYIhUBygAAFr4iZJci+4UVAcYAABacImRRIvOBA2VtbvsCZG/zhsAGKBUByAAAFj4iZH0gFQHMAAAWvCJklSITiQLDAAAiI2RrFQHJAAAWmiJkTyIThMAITMkAACJcywAAImvHAAAiPRsC0wAAIpRmbBUB2gAAFsgiZLEi+4NnTQD+AB+kHVWILQ46ywAAIcVF6vkzTMsAACHHwgAAHKNuXxBgYQFzIAA [...]
\ No newline at end of file
diff --git a/api/search.index/7c09e36592.js b/api/search.index/7c09e36592.js
new file mode 100644
index 000000000..858472335
--- /dev/null
+++ b/api/search.index/7c09e36592.js
@@ -0,0 +1 @@
+rn_("FQHHAACoaiJ3BCExwAAAuRa6FuYbpYLEAAAUziEsIAUCxgAAF3MiFUkiZnT7AmFmIcIAABAdix7zAf0JAAU7MAAAAQAAfQEGAKsTAgAFFWQA0RoBAAYbXQAUH1oAmyBaAA==")
\ No newline at end of file
diff --git a/api/search.index/7ce2f5f493.js b/api/search.index/7ce2f5f493.js
deleted file mode 100644
index 94b397472..000000000
--- a/api/search.index/7ce2f5f493.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("QcYAAD4inCLBIsgi8wABZOqAGgAA/hoAAH0gAAAcIgAAOSIAAFEiAABaIgAAdSIAAH4iAACgIgAAsSIAAAABEAAQAA==")
\ No newline at end of file
diff --git a/api/search.index/7cf59ea47a.js b/api/search.index/7cf59ea47a.js
new file mode 100644
index 000000000..6aeb4e941
--- /dev/null
+++ b/api/search.index/7cf59ea47a.js
@@ -0,0 +1 @@
+rn_("BYnAAAAXQiIRcCEFicQAABKNIhGHIiOFAuAAACIKZGYFAsQAABZ8IhNgIm90GwLNAAAioGhvNwGEwA5pwgAAIZnXAAAix8MAACHxxAAAIgsTgQLIAAAipGVsBYnAAAAXQSIRbyEFicQAABKMIhGGIiOFAuAAACIIZGYFAsQAABZ7IhNfIm90GwLNAAAin2hvNwGGwA5pwgAAIZjXAAAixsMAACHwxAAAIgmjAP0tgADFAAAcoscAACBmyAAAIIABTg8AAA==")
\ No newline at end of file
diff --git a/api/search.index/7cf98ff8af.js b/api/search.index/7cf98ff8af.js
deleted file mode 100644
index 799d2f2ed..000000000
--- a/api/search.index/7cf98ff8af.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BQLAAAAsYCKmIsg4IG9yFQHCAAAWxiJkrSLzAAFtAXkTAAAFisAAAKFXHRhiIgFB5b4aAADAHAAAvB4AAMYeAABEIAAAtSEAABEAABUBygAAFroiZI0ixwYB/YMJA8QAACInwgAAHSPBAAAdVjowAAABAAAAAAAgABAAAAD1Gvcafhx/HJkcrRwvHTAdfB19HX4dfx2AHYEdgh2FHsEfByBiIGggBiEmISchKCEpIXEhciGIIbohuyG8IcUhcCIVAcIAABKwIm2ZIiOHAscAACK2YWsjCwLJAAAio2FjAbQhAAA7/QhAhMEAAB+QxwAAIhFTAAPBAAAbcGltdOI3DwAAcRsAAG8gAAAQAA==")
\ No newline at end of file
diff --git a/api/search.index/7d53c5167f.js b/api/search.index/7d53c5167f.js
new file mode 100644
index 000000000..e75e8ff26
--- /dev/null
+++ b/api/search.index/7d53c5167f.js
@@ -0,0 +1 @@
+rn_("AYPAAgrMAAAiWsYAACGIzwAAInbzAQF3g14PAAAVAcAAABm7HWYjBRUBzgAAFq0iY2ki8wIBY+H4HAAAcR8AABB7/RVAAMEAACD8")
\ No newline at end of file
diff --git a/api/search.index/7d649affd2.js b/api/search.index/7d649affd2.js
deleted file mode 100644
index 317c8442c..000000000
--- a/api/search.index/7d649affd2.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("BYnAAAAXQCIRbiEFicQAABKLIhGFIiOFAuAAACIIZGYFAsQAABZ6IhNeIm90GwLNAAAinmhvNwGGwA5pwgAAIZfXAAAixcMAACHvxAAAIgkFicAAABc/IhFtIQWJxAAAEooiEYQiI4UC4AAAIgZkZgUCxAAAFnkiE10ib3QbAs0AACKdaG83AYbADmnCAAAhltcAACLEwwAAIe7EAAAiBzvACgjIAAAgfg==")
\ No newline at end of file
diff --git a/api/search.index/7d9a27d56a.js b/api/search.index/7d9a27d56a.js
new file mode 100644
index 000000000..e056ff2ac
--- /dev/null
+++ b/api/search.index/7d9a27d56a.js
@@ -0,0 +1 @@
+rn_("JYTCAAATaiHBFLIfRQHFAAAVIyJjqCGpIbAhsSE1hMUAABcVIeUb8BzxHGUCwAAAFK8h5OocY3SxDiwPwR3KHf8eAB/hxQAA5BwlAcUAACZsInEiYuoh7yGlAcEAABR/IWaGIqUBwgAAFKYhZowi+4kxxQAA1R5IIEkg8wPCAAnz1R0AALgBCAIVAcIAABSWIGPhHyOBAsEAABzyZWwjAAPOAAAilscAACBKZWZy87AOAABYEwIA5wcAww5IxAAAHOPh+wsAACoOAAAHm/0QQUDJAAAgEsMAACJJ")
\ No newline at end of file
diff --git a/api/search.index/7daa893b40.js b/api/search.index/7daa893b40.js
deleted file mode 100644
index 2024f35ce..000000000
--- a/api/search.index/7daa893b40.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("FYTAAAASqB0UDFHIAACuH1wgXSDnIWMiIwMDxAAAISXEAAAh+mFncuupEAAA5BoAAFgcAAC6HgAA3x4AANsfAADlHwAAbSAAAA0hAABSIgAAYCIAAKYiAACzIQJhABEVAcYAABZmIWY8HfMCAXPhtQ4AAKgQAAAQ+wJsdPMAAmFr8rIDAADIDw==")
\ No newline at end of file
diff --git a/api/search.index/7e01f4b18f.js b/api/search.index/7e01f4b18f.js
new file mode 100644
index 000000000..76fde1fa6
--- /dev/null
+++ b/api/search.index/7e01f4b18f.js
@@ -0,0 +1 @@
+rn_("RQHCAACgGR1zXg5qHWsdbB01AsAAABX6GxX7G3J3EAxiDmMOGwLgAAAOkm54BQLAAAAa/CAyZBBlEA8iY3L7A2Vpcw==")
\ No newline at end of file
diff --git a/api/search.index/7e19c16e7b.js b/api/search.index/7e19c16e7b.js
new file mode 100644
index 000000000..76a1f2334
--- /dev/null
+++ b/api/search.index/7e19c16e7b.js
@@ -0,0 +1 @@
+rn_("FQHHAACoaiJ3BCExwAAAuRa6FuYbAUXiTSAAAHkhAAATIgAAYgAbAsUAAB+rbnQhwwAAahXnIaWCxAAAFM4hLCAxxQAAvCLAIsEioc0AAC8iBQLGAAAXcyIVSSJmdPMA/ADUAd0JAABBxgAAtCK1IsIixCLzBAFk5gEfAADSIQAAWSIAAF0iAAB5IgAAoSIAAKMiAAABABAAIcIAABAdix73CwD9iwEH4QAAHAs7MAAAAQAAkQESAIwJAADXCwAAqBAAAKsTAgAFFWQAmBYAANEaAQAGG10AwB4CABQfWgBAIAEAmyBaADIhAwBVIQEA+SEAADUiAACPIgAAmSIBAA==")
\ No newline at end of file
diff --git a/api/search.index/7e70839451.js b/api/search.index/7e70839451.js
new file mode 100644
index 000000000..ed1e6c9fd
--- /dev/null
+++ b/api/search.index/7e70839451.js
@@ -0,0 +1 @@
+rn_("FQHSAAAWxCJkoyIVAdQAABbFImSqIhUBzwAAFswiZMkiFQHGAAAWwyJkoiJTjAPGAAAiqWVscIcDg/0o0ATKAAAiVNMAACKoygAAIlUFAsIAABNtHRqJIWRuRQHEAACmtiJk9iH3IYMihCL7A2Fpcg==")
\ No newline at end of file
diff --git a/api/search.index/7f3c813f51.js b/api/search.index/7f3c813f51.js
new file mode 100644
index 000000000..49eaa94d6
--- /dev/null
+++ b/api/search.index/7f3c813f51.js
@@ -0,0 +1 @@
+rn_("NQHAAAASchttOQ86D3EgMcYAAJcdmB0MIBcBAP0CUAPBAAATk8UAACANxwAAIrruZA4AAMoaAABuGwAA+hsAAJYcAAA/HQAAuh0AAJ4eAADVHgAAHSAAAEggAABEIQAAqiEAAAIiAAAiIgAAoAAAEAAQAAB1gcwAABUpIighKSEqISshvCG9Ib4hO8AIoMoAACGK")
\ No newline at end of file
diff --git a/api/search.index/7f463eb22a.js b/api/search.index/7f463eb22a.js
deleted file mode 100644
index f0049b431..000000000
--- a/api/search.index/7f463eb22a.js
+++ /dev/null
@@ -1 +0,0 @@
-rn_("UcgAAK4fXCBdIOchYyIjAgPEAAAhJcQAACH6YWdy66kQAADkGgAAWBwAALoeAADfHgAA2x8AAOUfAABtIAAADSEAAFIiAABgIgAApiIAALMhAmEAEQ==")
\ No newline at end of file
diff --git a/api/search.index/desc/9f972a52f4.js b/api/search.index/desc/9f972a52f4.js
deleted file mode 100644
index 81b480b16..000000000
--- a/api/search.index/desc/9f972a52f4.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.B`HuggingFace Hub storage factory.B`HuggingFace Hub storage variant.CgMatch fields by their ID stored in Arrow field metadataAjContains the success valueCoOr predicate, for example, <code>a > 10 OR b < 20</code>.EnAn [...]
\ No newline at end of file
diff --git a/api/search.index/desc/b22a42340f.js b/api/search.index/desc/b22a42340f.js
new file mode 100644
index 000000000..55424fe1b
--- /dev/null
+++ b/api/search.index/desc/b22a42340f.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.B`HuggingFace Hub storage factory.B`HuggingFace Hub storage variant.CgMatch fields by their ID stored in Arrow field metadataAjContains the success valueCoOr predicate, for example, <code>a > 10 OR b < 20</code>.EnAn [...]
\ No newline at end of file
diff --git a/api/search.index/entry/4b82128286.js b/api/search.index/entry/4b82128286.js
deleted file mode 100644
index e0700473e..000000000
--- a/api/search.index/entry/4b82128286.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("An[3901,17,3902,3817,7478,0,0,0]An[3901,17,3730,3730,8471,0,0,0]An[3901,17,7022,7022,8108,0,0,0]An[3901,17,2447,4191,7343,0,0,0]An[3901,17,2447,4191,8690,0,0,0]An[3901,17,2543,3697,8205,0,0,0]0An[3901,15,1593,1593,8117,0,0,0]An[8654,15,8655,8655,8557,0,0,0]0An[8654,15,8655,8655,7494,0,0,0]An[3901,15,2543,3033,7482,0,0,0]3An[3901,15,3902,2999,3092,0,0,0]An[3901,15,1593,5357,5025,0,0,0]An[3901,15,1593,5357,7475,0,0,0]54An[8441,15,8442,3823,7342,0,0,0]An[3901,15,2447,7599,7322,0,0,0]An [...]
\ No newline at end of file
diff --git a/api/search.index/entry/6e7469700f.js b/api/search.index/entry/6e7469700f.js
deleted file mode 100644
index 7d8d61d19..000000000
--- a/api/search.index/entry/6e7469700f.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("Ba[3901,13,8615,8615,8738,2485,0,0]Ba[3901,13,8615,8615,8681,2485,0,0]Ba[3901,13,8623,8623,8816,2485,0,0]Ba[3901,13,8623,8623,8686,2485,0,0]Ba[3901,13,7022,7565,7333,2485,0,0]Ba[3901,13,7022,7565,8475,2485,0,0]Ba[3901,13,8285,8285,8680,2485,0,0]Ba[3901,13,8285,8285,8804,2485,0,0]Ba[3901,13,8285,8285,8679,2485,0,0]Ba[3901,13,7586,7586,8121,2485,0,0]Ba[3901,13,7586,7586,8689,2485,0,0]Ba[3901,13,7407,7407,8468,2485,0,0]Ba[3901,13,7407,7407,7140,2485,0,0]Ba[3901,13,3681,3686,7161,2485,0 [...]
\ No newline at end of file
diff --git a/api/search.index/entry/b36f1bba39.js b/api/search.index/entry/b36f1bba39.js
new file mode 100644
index 000000000..a8f50599c
--- /dev/null
+++ b/api/search.index/entry/b36f1bba39.js
@@ -0,0 +1 @@
+rd_("Ba[3903,13,8617,8617,8813,2487,0,0]Ba[3903,13,8617,8617,8740,2487,0,0]Ba[3903,13,8617,8617,8683,2487,0,0]Ba[3903,13,8625,8625,8818,2487,0,0]Ba[3903,13,8625,8625,8688,2487,0,0]Ba[3903,13,7024,7567,7335,2487,0,0]Ba[3903,13,7024,7567,8477,2487,0,0]Ba[3903,13,8287,8287,8682,2487,0,0]Ba[3903,13,8287,8287,8806,2487,0,0]Ba[3903,13,8287,8287,8681,2487,0,0]Ba[3903,13,7588,7588,8123,2487,0,0]Ba[3903,13,7588,7588,8691,2487,0,0]Ba[3903,13,7409,7409,8470,2487,0,0]Ba[3903,13,7409,7409,7142,2487,0 [...]
\ No newline at end of file
diff --git a/api/search.index/entry/c710b1b327.js b/api/search.index/entry/c710b1b327.js
new file mode 100644
index 000000000..07ecd76c4
--- /dev/null
+++ b/api/search.index/entry/c710b1b327.js
@@ -0,0 +1 @@
+rd_("An[3903,17,3904,3819,7480,0,0,0]An[3903,17,3732,3732,8473,0,0,0]An[3903,17,7024,7024,8110,0,0,0]An[3903,17,2447,4193,7345,0,0,0]An[3903,17,2447,4193,8692,0,0,0]An[3903,17,2545,3699,8207,0,0,0]0An[3903,15,1593,1593,8119,0,0,0]An[8656,15,8657,8657,8559,0,0,0]0An[8656,15,8657,8657,7496,0,0,0]An[3903,15,2545,3035,7484,0,0,0]3An[3903,15,3904,3001,3094,0,0,0]An[3903,15,1593,5359,5027,0,0,0]An[3903,15,1593,5359,7477,0,0,0]54An[8443,15,8444,3825,7344,0,0,0]An[3903,15,2447,7601,7324,0,0,0]An [...]
\ No newline at end of file
diff --git a/api/search.index/entry/dd8426dce6.js b/api/search.index/entry/dd8426dce6.js
deleted file mode 100644
index 4d5bbdd84..000000000
--- a/api/search.index/entry/dd8426dce6.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("Ba[3901,13,6498,3722,7608,5023,0,0]Ba[3901,13,6498,3623,5783,5023,0,0]Ba[3901,13,6498,3623,5032,5023,0,0]Ba[3901,13,6498,7215,8324,5023,0,0]Ba[3901,13,6498,3910,8105,5023,0,0]Ba[3901,13,1192,3609,7150,5023,0,0]Ba[3901,13,1192,3669,8710,5023,0,0]Ba[3901,13,1192,3669,8597,5023,0,0]Ba[3901,13,7937,7937,7611,5023,0,0]Ba[3901,13,7413,7413,7143,5023,0,0]Ba[3901,13,8527,8527,8325,5023,0,0]Ba[3901,13,7951,7951,8547,5023,0,0]Ba[3901,13,7951,7951,7481,5023,0,0]Ba[3901,13,8615,8615,8811,5023,0 [...]
\ No newline at end of file
diff --git a/api/search.index/entry/e7bb703341.js b/api/search.index/entry/e7bb703341.js
new file mode 100644
index 000000000..e57ccff4a
--- /dev/null
+++ b/api/search.index/entry/e7bb703341.js
@@ -0,0 +1 @@
+rd_("Ba[3903,13,6500,3724,7476,5025,0,0]Ba[3903,13,6500,3724,7610,5025,0,0]Ba[3903,13,6500,3625,5785,5025,0,0]Ba[3903,13,6500,3625,5034,5025,0,0]Ba[3903,13,6500,7217,8326,5025,0,0]Ba[3903,13,6500,3912,8107,5025,0,0]Ba[3903,13,1192,3611,7152,5025,0,0]Ba[3903,13,1192,3671,8712,5025,0,0]Ba[3903,13,1192,3671,8599,5025,0,0]Ba[3903,13,7939,7939,7613,5025,0,0]Ba[3903,13,7415,7415,7145,5025,0,0]Ba[3903,13,8529,8529,8327,5025,0,0]Ba[3903,13,7953,7953,8549,5025,0,0]Ba[3903,13,7953,7953,7483,5025,0 [...]
\ No newline at end of file
diff --git a/api/search.index/function/69d32cb80e.js b/api/search.index/function/69d32cb80e.js
deleted file mode 100644
index d275de70e..000000000
--- a/api/search.index/function/69d32cb80e.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("Bf[\"{{{BINh{BGAj}}{BINh{BGAj}}}JGf}\",[]]Bf[\"{{{BINh{CML`}}{BINh{CML`}}}JGf}\",[]]Bf[\"{{{BINh{CJHf}}{BINh{CJHf}}}JGf}\",[]]Bf[\"{{{BINh{BGCb}}{BINh{BGCb}}}JGf}\",[]]Bf[\"{{{BINh{BMH`}}{BINh{BMH`}}}JGf}\",[]]Bf[\"{{{BINh{CMNd}}{BINh{CMNd}}}JGf}\",[]]Bf[\"{{{BINh{CENb}}{BINh{CENb}}}JGf}\",[]]Bf[\"{{{BINh{BMHf}}{BINh{BMHf}}}JGf}\",[]]Bf[\"{{{BINh{BGDh}}{BINh{BGDh}}}JGf}\",[]]Bf[\"{{{BINh{CJFh}}{BINh{CJFh}}}JGf}\",[]]Cg[\"{{{BINh{{COF`{c}}}}{BINh{{COF`{c}}}}}JGfBGCl}\",[\"T\"]]Cg[\"{ [...]
\ No newline at end of file
diff --git a/api/search.index/function/95f07a49e8.js b/api/search.index/function/95f07a49e8.js
new file mode 100644
index 000000000..ba7c3f436
--- /dev/null
+++ b/api/search.index/function/95f07a49e8.js
@@ -0,0 +1 @@
+rd_("Bf[\"{{{BINl{BGAn}}{BINl{BGAn}}}JGf}\",[]]Bf[\"{{{BINl{CMLd}}{BINl{CMLd}}}JGf}\",[]]Bf[\"{{{BINl{CJHj}}{BINl{CJHj}}}JGf}\",[]]Bf[\"{{{BINl{BGCf}}{BINl{BGCf}}}JGf}\",[]]Bf[\"{{{BINl{BMHd}}{BINl{BMHd}}}JGf}\",[]]Bf[\"{{{BINl{CMNh}}{BINl{CMNh}}}JGf}\",[]]Bf[\"{{{BINl{CENf}}{BINl{CENf}}}JGf}\",[]]Bf[\"{{{BINl{BMHj}}{BINl{BMHj}}}JGf}\",[]]Bf[\"{{{BINl{BGDl}}{BINl{BGDl}}}JGf}\",[]]Bf[\"{{{BINl{CJFl}}{BINl{CJFl}}}JGf}\",[]]Cg[\"{{{BINl{{COFd{c}}}}{BINl{{COFd{c}}}}}JGfBGD`}\",[\"T\"]]Cg[\"{ [...]
\ No newline at end of file
diff --git a/api/search.index/function/d31af4a1e6.js b/api/search.index/function/d31af4a1e6.js
new file mode 100644
index 000000000..8f05afd90
--- /dev/null
+++ b/api/search.index/function/d31af4a1e6.js
@@ -0,0 +1 @@
+rd_("An[\"{{DDAn{CD`{CJJn}}}DDAn}\",[]]An[\"{{DCCh{CD`{CJJn}}}DCCh}\",[]]An[\"{{COH`{CD`{CJJn}}}COH`}\",[]]Be[\"{{{BINl{CKJ`}}}{{AHBl{AHCj}}}}\",[]]o[\"{{}BINl}\",[]]0000n[\"{{}IDf}\",[]]11Aa[\"{AMHhAMFj}\",[]]Bd[\"{{{BINl{B@M`}}}{{AHAl{IDh}}}}\",[]]Cf[\"{{{BINl{IFfCKHb}}{AHAl{IDh}}}{{BINl{IFfCKHb}}}}\",[]]Bd[\"{{{BINl{DCBl}}}{{AHAl{JAh}}}}\",[]]Ai[\"{JAf{{AHBl{JAf}}}}\",[]]Aj[\"{{{BINl{CIGn}}}IDh}\",[]]A`[\"{DCHbIDh}\",[]]Ai[\"{{}{{BINl{CJHl}}}}\",[]]A`[\"{DCNlCGl}\",[]]Bi[\"{{{BINl{CKJ [...]
\ No newline at end of file
diff --git a/api/search.index/function/fae82ce647.js b/api/search.index/function/fae82ce647.js
deleted file mode 100644
index 1197cc97a..000000000
--- a/api/search.index/function/fae82ce647.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("o[\"{{}BINh}\",[]]0000n[\"{{}IDf}\",[]]11Aa[\"{AMHdAMFf}\",[]]Bd[\"{{{BINh{B@Ll}}}{{AHAh{IDh}}}}\",[]]Cf[\"{{{BINh{IFfCKGn}}{AHAh{IDh}}}{{BINh{IFfCKGn}}}}\",[]]Bd[\"{{{BINh{DCBh}}}{{AHAh{JAh}}}}\",[]]Ai[\"{JAf{{AHBh{JAf}}}}\",[]]Aj[\"{{{BINh{CIGj}}}IDh}\",[]]A`[\"{DCGnIDh}\",[]]Ai[\"{{}{{BINh{CJHh}}}}\",[]]A`[\"{DCNhCGl}\",[]]Bi[\"{{{BINh{CKIl}}BGDn}{{AHBh{DBCf}}}}\",[]]Ak[\"{{{BINh{COEb}}}DA@h}\",[]]Bc[\"{{{BINh{JAb}}}{{AHBh{IDf}}}}\",[]]Ag[\"{{BGDhACHd}BGDb}\",[]]Be[\"{{{BINh{CKIl [...]
\ No newline at end of file
diff --git a/api/search.index/generic_inverted_index/adc16a4e1b.js b/api/search.index/generic_inverted_index/adc16a4e1b.js
deleted file mode 100644
index 7bd1e04d4..000000000
--- a/api/search.index/generic_inverted_index/adc16a4e1b.js
+++ /dev/null
@@ -1 +0,0 @@
-rb_("REhmADswAAABAAAoAQQAXAj0AKQJDgDMFAEAcxsiADswAAABAACMAhYAAAUAAEYGAABMBhkAZwYZAIIGAACEBgUAjwYJAJsGDgCrBgAArQYQAMAGAwDFBggAzwYBANIGAADUBgYA3AYnAAUHIgApBxEAPAcZAOIQngCDEvQAyRQCADswAAABAADWAxUAtgL0ALwKBQDDCi4A8wq/ACENNQBYDb4Aiw4BAIERKgCtEQEAsBEAALIRAAC1ERcAzhEBANERBADXEQoA4xEqAA8SIAAxEkUAeBIBAHsSBwACIQAAOzAAAAEAAIcCGwCbAAIApAQBALgEAAC6BAAA0AQAAPoEAAA7BQEAZQkBAMIKAAC8CwEAGQ0BADAOAQDYDgAA8Q4EAMkQAADWEQAAehMAAMQTNAD6E78AYxkWAQQbBgAPGzoASxsWAOEcAAAEIAEA1yEAABgiAQA7MAAAAQAAJQInALMEAAC7BAAA/gQ [...]
\ No newline at end of file
diff --git a/api/search.index/generic_inverted_index/f60e13f812.js b/api/search.index/generic_inverted_index/f60e13f812.js
new file mode 100644
index 000000000..acea86d41
--- /dev/null
+++ b/api/search.index/generic_inverted_index/f60e13f812.js
@@ -0,0 +1 @@
+rb_("REhjADswAAABAAAoAQQAXAj0AKYJDgDOFAEAdRsiADswAAABAACMAhYAAAUAAEcGAABMBhoAaAYZAIQGBACKBgAAjwYIAJoGEACsBgAArgYOAL8GBQDGBgcAzwYBANIGAADUBgYA3AYnAAUHIgApBxEAPAcZAOQQngCFEvQAyxQCADswAAABAADWAxUAtgL0AL4KBQDFCi4A9Qq/ACMNNABZDb8AjQ4BAIMRKwCwEQAAsxEAALURAQC4ERUAzxECANMRBADZEQsA5hEqABISIAA0EkQAehIBAH0SBwAEIQAAOzAAAAEAAIcCGwCbAAIApAQBALgEAAC6BAAA0AQAAPoEAAA7BQEAZQkBAMQKAAC+CwEAGw0BADIOAQDaDgAA8w4EAMsQAADYEQAAfBMAAMYTNQD9E74AZRkWAQYbBgARGzoATRsWAOMcAAAGIAEA2SEAABoiAQA7MAAAAQAAJQInALMEAAC7BAAA/gQ [...]
\ No newline at end of file
diff --git a/api/search.index/name/d803ffc870.js b/api/search.index/name/d803ffc870.js
new file mode 100644
index 000000000..129626220
--- /dev/null
+++ b/api/search.index/name/d803ffc870.js
@@ -0,0 +1 @@
+rd_("aC0aR00aT000aU0b()b->bAsbEqbFsbHf00bIdbInbOkbOr00bS3000bV0bV100bV2bV3b[]beq0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bhfbidbio000bop00bor00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bs30btobu8bv1bv2bv3cAnd00cAnycArccB [...]
\ No newline at end of file
diff --git a/api/search.index/name/fd0ff35b8f.js b/api/search.index/name/fd0ff35b8f.js
deleted file mode 100644
index 626e75647..000000000
--- a/api/search.index/name/fd0ff35b8f.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("aC0aR00aT000aU0b()b->bAsbEqbFsbHf00bIdbInbOkbOr00bS3000bV0bV100bV2bV3b[]beq0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bhfbidbio000bop00bor00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bs30btobu8bv1bv2bv3cAnd00cAnycArccB [...]
\ No newline at end of file
diff --git a/api/search.index/normalizedName/76ec0b5fa0.js b/api/search.index/normalizedName/76ec0b5fa0.js
new file mode 100644
index 000000000..c9e6ecab4
--- /dev/null
+++ b/api/search.index/normalizedName/76ec0b5fa0.js
@@ -0,0 +1 @@
+rd_("ac0ar00at000au0b()b->basbeqbfsbhf00bidbinbokbor00bs3000bv0bv100bv2bv3b[]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:9bio000bop0088888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888877btobu8765cand00canycarccboxcdaycerrcgcs00 [...]
\ No newline at end of file
diff --git a/api/search.index/normalizedName/992720dc21.js b/api/search.index/normalizedName/992720dc21.js
deleted file mode 100644
index 6076d6867..000000000
--- a/api/search.index/normalizedName/992720dc21.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("ac0ar00at000au0b()b->basbeqbfsbhf00bidbinbokbor00bs3000bv0bv100bv2bv3b[]<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:9bio000bop0088888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888877btobu8765cand00canycarccboxcdaycerrcgcs00 [...]
\ No newline at end of file
diff --git a/api/search.index/root.js b/api/search.index/root.js
index 91a99a5f2..ddc09eabb 100644
--- a/api/search.index/root.js
+++ b/api/search.index/root.js
@@ -1 +1 @@
-rr_('{"normalizedName":{"I":"VYLAAAAUtROXAWYHAwyfDsYOJQHAAAAwtAOjBAsFNAkFoQ4lAcAAABChDja0FrAiVQLAAAASBQwV6Bpyc6gBtAOjBAsFyAt1/MBEAgAAQWYHAwyfDsYOEAkFEaAOHgAfACAAmAGEEBAgSiIVAcAAACF7EL8cbqkBBQLAAAAT/x8QvhxhcwEBAcUAABwkZOIUBQAAKQUAAKQJAAAA4AUCwwAApxgiokshZHNFAcIAABXLGmO4CbkJugnwCRUBwAAAEgUMcqgBFAHCdGQAABZlZmF1bHSRHGQsBXYbAAH+CE4cABtU/gyjxAAAIGtzANLyGgAA3BUB0QAAFroiZI0iFQHWAAAWySJkuSIxwAAAYBDcHt0e84ECZnAJAtAAACIFzQAAIZRlbSHDAABdHXEgocgAANQhFQHHAAAWPiJkfSD7AmNlBQLAAAAUlROjKyFleQXAwAMBAAAi9xS [...]
\ No newline at end of file
+rr_('{"normalizedName":{"I":"VYLAAAAUtxOXAWYHBQyhDsgOJQHAAAAwtAOjBAsFNAkFow4lAcAAABCjDja2FrIiVQLAAAASBwwV6hpyc6gBtAOjBAsFygt1/MBEAgAAQWYHBQyhDsgOEAkFEaIOHgAfACAAmAGGEBIgTCIVAcAAACF9EMEcbqkBBQLAAAATASAQwBxhcwEBAcUAABwmZOIUBQAAKQUAAKYJAAAA4AUCwwAApxoiok0hZHNFAcIAABXNGmO6CbsJvAnyCRUBwAAAEgcMcqgBFAHCdGQAABZlZmF1bHSTHGQsBXYbAAH+CE4cAH4ZwW57xAAAIG1zANL0GgAA3BUB0QAAFrwiZI8iFQHWAAAWyyJkuyIxwAAAYhDeHt8e84ECZnAJAtAAACIHzQAAIZZlbSHDAABfHXMgocgAANYhFQHHAAAWQCJkfyD7AmNlBQLAAAAUlxOjLSFleQXAwAMBAAAi+RS [...]
\ No newline at end of file
diff --git a/api/search.index/type/2983f86188.js b/api/search.index/type/2983f86188.js
new file mode 100644
index 000000000..f1cc1457f
--- /dev/null
+++ b/api/search.index/type/2983f86188.js
@@ -0,0 +1 @@
+rd_("Ec[\"AAAAAAAAAAABhRwAAAJYIQAA3SEAAAAAAAAAAAFZCQAA\",\"AAAAAAAAAAABhRwAAAJYIQAA3SEAAA==\"]Bg[\"AAAAAAAAAAAAAAAAAQMKAAABBwoAAA==\",\"\"]Ok[\"AAAAAAAAAAAAOjAAAAEAAAAAABEAEAAAAFwQ8RTJHMocYB1hHdYd1x35HvoeNCA1IDogOyCLIIwgkSCSIANWCQAAugsAAHUOAAA7MAAAAQAAKAAPAK8EAAChCQEAjw4AAF0QAgDyFAEA+hoBAAccAQDLHAMAYh0DANgdAwD7HgMANiADADwgAQCNIAMAkyABAARXCQAAWAkAALsLAAB2DgAABbAEAACxBAAAgA4AAJAOAACRDgAA\",\"\"]Gk[\"AAAAAAAAAAAAAAA6MAAAAQAAAAAAFAAQAAAAoQmiCV4QXxDzFPoa+xoHHAgczRzOHGQdZR3aHdsd/R7+HjggOSCPIJA [...]
\ No newline at end of file
diff --git a/api/search.index/type/8a6159c54a.js b/api/search.index/type/8a6159c54a.js
deleted file mode 100644
index a307542fc..000000000
--- a/api/search.index/type/8a6159c54a.js
+++ /dev/null
@@ -1 +0,0 @@
-rd_("Ec[\"AAAAAAAAAAABgxwAAAJWIQAA2yEAAAAAAAAAAAFZCQAA\",\"AAAAAAAAAAABgxwAAAJWIQAA2yEAAA==\"]Bg[\"AAAAAAAAAAAAAAAAAQEKAAABBQoAAA==\",\"\"]Og[\"AAAAAAAAAAAAOjAAAAEAAAAAABEAEAAAAFoQ7xTHHMgcXh1fHdQd1R33HvgeMiAzIDggOSCJIIogjyCQIANWCQAAuAsAAHMOAAA7MAAAAQAAJgAOAK8EAACNDgAAWxACAPAUAQD4GgEABRwBAMkcAwBgHQMA1h0DAPkeAwA0IAMAOiABAIsgAwCRIAEABFcJAABYCQAAuQsAAHQOAAAFsAQAALEEAAB+DgAAjg4AAI8OAAA=\",\"\"]Gg[\"AAAAAAAAAAAAAAA6MAAAAQAAAAAAEgAQAAAAXBBdEPEU+Br5GgUcBhzLHMwcYh1jHdgd2R37HvweNiA3II0gjiABWAkAAAO [...]
\ No newline at end of file
diff --git a/api/src/iceberg/arrow/schema.rs.html b/api/src/iceberg/arrow/schema.rs.html
index 7495906fe..ae4320623 100644
--- a/api/src/iceberg/arrow/schema.rs.html
+++ b/api/src/iceberg/arrow/schema.rs.html
@@ -26,7 +26,7 @@
<a href=#26 id=26 data-nosnippet>26</a> FixedSizeBinaryArray, Float32Array, Float64Array, Int32Array, Int64Array, Scalar, StringArray,
<a href=#27 id=27 data-nosnippet>27</a> TimestampMicrosecondArray, TimestampNanosecondArray,
<a href=#28 id=28 data-nosnippet>28</a>};
-<a href=#29 id=29 data-nosnippet>29</a><span class="kw">use </span>arrow_schema::extension::ExtensionType;
+<a href=#29 id=29 data-nosnippet>29</a><span class="kw">use </span>arrow_schema::extension::{ExtensionType, Uuid <span class="kw">as </span>UuidExtensionType};
<a href=#30 id=30 data-nosnippet>30</a><span class="kw">use </span>arrow_schema::{
<a href=#31 id=31 data-nosnippet>31</a> ArrowError, DataType, Field, FieldRef, Fields, Schema <span class="kw">as </span>ArrowSchema, TimeUnit,
<a href=#32 id=32 data-nosnippet>32</a>};
@@ -184,2782 +184,2949 @@
<a href=#184 id=184 data-nosnippet>184</a> <span class="kw">where </span><span class="self">Self</span>: Sized {
<a href=#185 id=185 data-nosnippet>185</a> visit_type(field.data_type(), <span class="self">self</span>)
<a href=#186 id=186 data-nosnippet>186</a> }
-<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">/// Visiting a type in post order.
-<a href=#190 id=190 data-nosnippet>190</a></span><span class="kw">fn </span>visit_type<V: ArrowSchemaVisitor>(r#type: <span class="kw-2">&</span>DataType, visitor: <span class="kw-2">&mut </span>V) -> <span class="prelude-ty">Result</span><V::T> {
-<a href=#191 id=191 data-nosnippet>191</a> <span class="kw">match </span>r#type {
-<a href=#192 id=192 data-nosnippet>192</a> p <span class="kw">if </span>p.is_primitive()
-<a href=#193 id=193 data-nosnippet>193</a> || <span class="macro">matches!</span>(
-<a href=#194 id=194 data-nosnippet>194</a> p,
-<a href=#195 id=195 data-nosnippet>195</a> DataType::Boolean
-<a href=#196 id=196 data-nosnippet>196</a> | DataType::Utf8
-<a href=#197 id=197 data-nosnippet>197</a> | DataType::LargeUtf8
-<a href=#198 id=198 data-nosnippet>198</a> | DataType::Utf8View
-<a href=#199 id=199 data-nosnippet>199</a> | DataType::Null
-<a href=#200 id=200 data-nosnippet>200</a> | DataType::Binary
-<a href=#201 id=201 data-nosnippet>201</a> | DataType::LargeBinary
-<a href=#202 id=202 data-nosnippet>202</a> | DataType::BinaryView
-<a href=#203 id=203 data-nosnippet>203</a> | DataType::FixedSizeBinary(<span class="kw">_</span>)
-<a href=#204 id=204 data-nosnippet>204</a> ) =>
-<a href=#205 id=205 data-nosnippet>205</a> {
-<a href=#206 id=206 data-nosnippet>206</a> visitor.primitive(p)
-<a href=#207 id=207 data-nosnippet>207</a> }
-<a href=#208 id=208 data-nosnippet>208</a> DataType::List(element_field) => visit_list(r#type, element_field, visitor),
-<a href=#209 id=209 data-nosnippet>209</a> DataType::LargeList(element_field) => visit_list(r#type, element_field, visitor),
-<a href=#210 id=210 data-nosnippet>210</a> DataType::FixedSizeList(element_field, <span class="kw">_</span>) => visit_list(r#type, element_field, visitor),
-<a href=#211 id=211 data-nosnippet>211</a> DataType::Map(field, <span class="kw">_</span>) => <span class="kw">match </span>field.data_type() {
-<a href=#212 id=212 data-nosnippet>212</a> DataType::Struct(fields) => {
-<a href=#213 id=213 data-nosnippet>213</a> <span class="kw">if </span>fields.len() != <span class="number">2 </span>{
-<a href=#214 id=214 data-nosnippet>214</a> <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map field must have exactly 2 fields"</span>));
-<a href=#215 id=215 data-nosnippet>215</a> }
-<a href=#216 id=216 data-nosnippet>216</a>
-<a href=#217 id=217 data-nosnippet>217</a> <span class="kw">let </span>key_field = <span class="kw-2">&</span>fields[<span class="number">0</span>];
-<a href=#218 id=218 data-nosnippet>218</a> <span class="kw">let </span>value_field = <span class="kw-2">&</span>fields[<span class="number">1</span>];
-<a href=#219 id=219 data-nosnippet>219</a>
-<a href=#220 id=220 data-nosnippet>220</a> <span class="kw">let </span>key_result = {
-<a href=#221 id=221 data-nosnippet>221</a> visitor.before_map_key(key_field)<span class="question-mark">?</span>;
-<a href=#222 id=222 data-nosnippet>222</a> <span class="kw">let </span>ret = visit_field(key_field, visitor)<span class="question-mark">?</span>;
-<a href=#223 id=223 data-nosnippet>223</a> visitor.after_map_key(key_field)<span class="question-mark">?</span>;
-<a href=#224 id=224 data-nosnippet>224</a> ret
-<a href=#225 id=225 data-nosnippet>225</a> };
-<a href=#226 id=226 data-nosnippet>226</a>
-<a href=#227 id=227 data-nosnippet>227</a> <span class="kw">let </span>value_result = {
-<a href=#228 id=228 data-nosnippet>228</a> visitor.before_map_value(value_field)<span class="question-mark">?</span>;
-<a href=#229 id=229 data-nosnippet>229</a> <span class="kw">let </span>ret = visit_field(value_field, visitor)<span class="question-mark">?</span>;
-<a href=#230 id=230 data-nosnippet>230</a> visitor.after_map_value(value_field)<span class="question-mark">?</span>;
-<a href=#231 id=231 data-nosnippet>231</a> ret
-<a href=#232 id=232 data-nosnippet>232</a> };
+<a href=#187 id=187 data-nosnippet>187</a>
+<a href=#188 id=188 data-nosnippet>188</a> <span class="doccomment">/// Called when a field carries the `arrow.uuid` extension type.
+<a href=#189 id=189 data-nosnippet>189</a> ///
+<a href=#190 id=190 data-nosnippet>190</a> /// The default treats the field as its underlying Arrow storage, preserving
+<a href=#191 id=191 data-nosnippet>191</a> /// the behavior of visitors that don't special-case UUIDs. A visitor that
+<a href=#192 id=192 data-nosnippet>192</a> /// produces Iceberg types should override this to fold the storage into a
+<a href=#193 id=193 data-nosnippet>193</a> /// single logical UUID.
+<a href=#194 id=194 data-nosnippet>194</a> ///
+<a href=#195 id=195 data-nosnippet>195</a> /// Takes the `&FieldRef` rather than a `&DataType` because the UUID signal
+<a href=#196 id=196 data-nosnippet>196</a> /// lives on the field's metadata, not on its data type.
+<a href=#197 id=197 data-nosnippet>197</a> </span><span class="kw">fn </span>uuid(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T>
+<a href=#198 id=198 data-nosnippet>198</a> <span class="kw">where </span><span class="self">Self</span>: Sized {
+<a href=#199 id=199 data-nosnippet>199</a> visit_type(field.data_type(), <span class="self">self</span>)
+<a href=#200 id=200 data-nosnippet>200</a> }
+<a href=#201 id=201 data-nosnippet>201</a>}
+<a href=#202 id=202 data-nosnippet>202</a>
+<a href=#203 id=203 data-nosnippet>203</a><span class="doccomment">/// Visiting a type in post order.
+<a href=#204 id=204 data-nosnippet>204</a></span><span class="kw">fn </span>visit_type<V: ArrowSchemaVisitor>(r#type: <span class="kw-2">&</span>DataType, visitor: <span class="kw-2">&mut </span>V) -> <span class="prelude-ty">Result</span><V::T> {
+<a href=#205 id=205 data-nosnippet>205</a> <span class="kw">match </span>r#type {
+<a href=#206 id=206 data-nosnippet>206</a> p <span class="kw">if </span>p.is_primitive()
+<a href=#207 id=207 data-nosnippet>207</a> || <span class="macro">matches!</span>(
+<a href=#208 id=208 data-nosnippet>208</a> p,
+<a href=#209 id=209 data-nosnippet>209</a> DataType::Boolean
+<a href=#210 id=210 data-nosnippet>210</a> | DataType::Utf8
+<a href=#211 id=211 data-nosnippet>211</a> | DataType::LargeUtf8
+<a href=#212 id=212 data-nosnippet>212</a> | DataType::Utf8View
+<a href=#213 id=213 data-nosnippet>213</a> | DataType::Null
+<a href=#214 id=214 data-nosnippet>214</a> | DataType::Binary
+<a href=#215 id=215 data-nosnippet>215</a> | DataType::LargeBinary
+<a href=#216 id=216 data-nosnippet>216</a> | DataType::BinaryView
+<a href=#217 id=217 data-nosnippet>217</a> | DataType::FixedSizeBinary(<span class="kw">_</span>)
+<a href=#218 id=218 data-nosnippet>218</a> ) =>
+<a href=#219 id=219 data-nosnippet>219</a> {
+<a href=#220 id=220 data-nosnippet>220</a> visitor.primitive(p)
+<a href=#221 id=221 data-nosnippet>221</a> }
+<a href=#222 id=222 data-nosnippet>222</a> DataType::List(element_field) => visit_list(r#type, element_field, visitor),
+<a href=#223 id=223 data-nosnippet>223</a> DataType::LargeList(element_field) => visit_list(r#type, element_field, visitor),
+<a href=#224 id=224 data-nosnippet>224</a> DataType::FixedSizeList(element_field, <span class="kw">_</span>) => visit_list(r#type, element_field, visitor),
+<a href=#225 id=225 data-nosnippet>225</a> DataType::Map(field, <span class="kw">_</span>) => <span class="kw">match </span>field.data_type() {
+<a href=#226 id=226 data-nosnippet>226</a> DataType::Struct(fields) => {
+<a href=#227 id=227 data-nosnippet>227</a> <span class="kw">if </span>fields.len() != <span class="number">2 </span>{
+<a href=#228 id=228 data-nosnippet>228</a> <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map field must have exactly 2 fields"</span>));
+<a href=#229 id=229 data-nosnippet>229</a> }
+<a href=#230 id=230 data-nosnippet>230</a>
+<a href=#231 id=231 data-nosnippet>231</a> <span class="kw">let </span>key_field = <span class="kw-2">&</span>fields[<span class="number">0</span>];
+<a href=#232 id=232 data-nosnippet>232</a> <span class="kw">let </span>value_field = <span class="kw-2">&</span>fields[<span class="number">1</span>];
<a href=#233 id=233 data-nosnippet>233</a>
-<a href=#234 id=234 data-nosnippet>234</a> visitor.map(r#type, key_result, value_result)
-<a href=#235 id=235 data-nosnippet>235</a> }
-<a href=#236 id=236 data-nosnippet>236</a> <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map field must have struct type"</span>)),
-<a href=#237 id=237 data-nosnippet>237</a> },
-<a href=#238 id=238 data-nosnippet>238</a> DataType::Struct(fields) => visit_struct(fields, visitor),
-<a href=#239 id=239 data-nosnippet>239</a> DataType::Dictionary(_key_type, value_type) => visit_type(value_type, visitor),
-<a href=#240 id=240 data-nosnippet>240</a> other => <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Cannot visit Arrow data type: {other}"</span>)),
-<a href=#241 id=241 data-nosnippet>241</a> }
-<a href=#242 id=242 data-nosnippet>242</a>}
-<a href=#243 id=243 data-nosnippet>243</a>
-<a href=#244 id=244 data-nosnippet>244</a><span class="doccomment">/// Dispatch a field: fold it into a variant when it carries the
-<a href=#245 id=245 data-nosnippet>245</a>/// `arrow.parquet.variant` extension type, otherwise visit its data type.
-<a href=#246 id=246 data-nosnippet>246</a></span><span class="kw">fn </span>visit_field<V: ArrowSchemaVisitor>(field: <span class="kw-2">&</span>FieldRef, visitor: <span class="kw-2">&mut </span>V) -> <span class="prelude-ty">Result</span><V::T> {
-<a href=#247 id=247 data-nosnippet>247</a> <span class="kw">if </span>field.extension_type_name() == <span class="prelude-val">Some</span>(VariantExtensionType::NAME) {
-<a href=#248 id=248 data-nosnippet>248</a> visitor.variant(field)
-<a href=#249 id=249 data-nosnippet>249</a> } <span class="kw">else </span>{
-<a href=#250 id=250 data-nosnippet>250</a> visit_type(field.data_type(), visitor)
-<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>
-<a href=#254 id=254 data-nosnippet>254</a><span class="doccomment">/// Visit list types in post order.
-<a href=#255 id=255 data-nosnippet>255</a></span><span class="kw">fn </span>visit_list<V: ArrowSchemaVisitor>(
-<a href=#256 id=256 data-nosnippet>256</a> data_type: <span class="kw-2">&</span>DataType,
-<a href=#257 id=257 data-nosnippet>257</a> element_field: <span class="kw-2">&</span>FieldRef,
-<a href=#258 id=258 data-nosnippet>258</a> visitor: <span class="kw-2">&mut </span>V,
-<a href=#259 id=259 data-nosnippet>259</a>) -> <span class="prelude-ty">Result</span><V::T> {
-<a href=#260 id=260 data-nosnippet>260</a> visitor.before_list_element(element_field)<span class="question-mark">?</span>;
-<a href=#261 id=261 data-nosnippet>261</a> <span class="kw">let </span>value = visit_field(element_field, visitor)<span class="question-mark">?</span>;
-<a href=#262 id=262 data-nosnippet>262</a> visitor.after_list_element(element_field)<span class="question-mark">?</span>;
-<a href=#263 id=263 data-nosnippet>263</a> visitor.list(data_type, value)
-<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="doccomment">/// Visit struct type in post order.
-<a href=#267 id=267 data-nosnippet>267</a></span><span class="kw">fn </span>visit_struct<V: ArrowSchemaVisitor>(fields: <span class="kw-2">&</span>Fields, visitor: <span class="kw-2">&mut </span>V) -> <span class="prelude-ty">Result</span><V::T> {
-<a href=#268 id=268 data-nosnippet>268</a> <span class="kw">let </span><span class="kw-2">mut </span>results = Vec::with_capacity(fields.len());
-<a href=#269 id=269 data-nosnippet>269</a> <span class="kw">for </span>field <span class="kw">in </span>fields {
-<a href=#270 id=270 data-nosnippet>270</a> visitor.before_field(field)<span class="question-mark">?</span>;
-<a href=#271 id=271 data-nosnippet>271</a> <span class="kw">let </span>result = visit_field(field, visitor)<span class="question-mark">?</span>;
-<a href=#272 id=272 data-nosnippet>272</a> visitor.after_field(field)<span class="question-mark">?</span>;
-<a href=#273 id=273 data-nosnippet>273</a> results.push(result);
-<a href=#274 id=274 data-nosnippet>274</a> }
-<a href=#275 id=275 data-nosnippet>275</a>
-<a href=#276 id=276 data-nosnippet>276</a> visitor.r#struct(fields, results)
-<a href=#277 id=277 data-nosnippet>277</a>}
-<a href=#278 id=278 data-nosnippet>278</a>
-<a href=#279 id=279 data-nosnippet>279</a><span class="doccomment">/// Visit schema in post order.
-<a href=#280 id=280 data-nosnippet>280</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>visit_schema<V: ArrowSchemaVisitor>(
-<a href=#281 id=281 data-nosnippet>281</a> schema: <span class="kw-2">&</span>ArrowSchema,
-<a href=#282 id=282 data-nosnippet>282</a> visitor: <span class="kw-2">&mut </span>V,
-<a href=#283 id=283 data-nosnippet>283</a>) -> <span class="prelude-ty">Result</span><V::U> {
-<a href=#284 id=284 data-nosnippet>284</a> <span class="kw">let </span><span class="kw-2">mut </span>results = Vec::with_capacity(schema.fields().len());
-<a href=#285 id=285 data-nosnippet>285</a> <span class="kw">for </span>field <span class="kw">in </span>schema.fields() {
-<a href=#286 id=286 data-nosnippet>286</a> visitor.before_field(field)<span class="question-mark">?</span>;
-<a href=#287 id=287 data-nosnippet>287</a> <span class="kw">let </span>result = visit_field(field, visitor)<span class="question-mark">?</span>;
-<a href=#288 id=288 data-nosnippet>288</a> visitor.after_field(field)<span class="question-mark">?</span>;
-<a href=#289 id=289 data-nosnippet>289</a> results.push(result);
-<a href=#290 id=290 data-nosnippet>290</a> }
-<a href=#291 id=291 data-nosnippet>291</a> visitor.schema(schema, results)
-<a href=#292 id=292 data-nosnippet>292</a>}
+<a href=#234 id=234 data-nosnippet>234</a> <span class="kw">let </span>key_result = {
+<a href=#235 id=235 data-nosnippet>235</a> visitor.before_map_key(key_field)<span class="question-mark">?</span>;
+<a href=#236 id=236 data-nosnippet>236</a> <span class="kw">let </span>ret = visit_field(key_field, visitor)<span class="question-mark">?</span>;
+<a href=#237 id=237 data-nosnippet>237</a> visitor.after_map_key(key_field)<span class="question-mark">?</span>;
+<a href=#238 id=238 data-nosnippet>238</a> ret
+<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>value_result = {
+<a href=#242 id=242 data-nosnippet>242</a> visitor.before_map_value(value_field)<span class="question-mark">?</span>;
+<a href=#243 id=243 data-nosnippet>243</a> <span class="kw">let </span>ret = visit_field(value_field, visitor)<span class="question-mark">?</span>;
+<a href=#244 id=244 data-nosnippet>244</a> visitor.after_map_value(value_field)<span class="question-mark">?</span>;
+<a href=#245 id=245 data-nosnippet>245</a> ret
+<a href=#246 id=246 data-nosnippet>246</a> };
+<a href=#247 id=247 data-nosnippet>247</a>
+<a href=#248 id=248 data-nosnippet>248</a> visitor.map(r#type, key_result, value_result)
+<a href=#249 id=249 data-nosnippet>249</a> }
+<a href=#250 id=250 data-nosnippet>250</a> <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map field must have struct type"</span>)),
+<a href=#251 id=251 data-nosnippet>251</a> },
+<a href=#252 id=252 data-nosnippet>252</a> DataType::Struct(fields) => visit_struct(fields, visitor),
+<a href=#253 id=253 data-nosnippet>253</a> DataType::Dictionary(_key_type, value_type) => visit_type(value_type, visitor),
+<a href=#254 id=254 data-nosnippet>254</a> other => <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Cannot visit Arrow data type: {other}"</span>)),
+<a href=#255 id=255 data-nosnippet>255</a> }
+<a href=#256 id=256 data-nosnippet>256</a>}
+<a href=#257 id=257 data-nosnippet>257</a>
+<a href=#258 id=258 data-nosnippet>258</a><span class="doccomment">/// Dispatch a field, and fold it into following extension types when carried:
+<a href=#259 id=259 data-nosnippet>259</a>/// - `arrow.parquet.variant` -- fold into a variant,
+<a href=#260 id=260 data-nosnippet>260</a>/// - `arrow.uuid` -- fold it into a UUID type,
+<a href=#261 id=261 data-nosnippet>261</a>/// - and in all other cases we visit it's data.
+<a href=#262 id=262 data-nosnippet>262</a></span><span class="kw">fn </span>visit_field<V: ArrowSchemaVisitor>(field: <span class="kw-2">&</span>FieldRef, visitor: <span class="kw-2">&mut </span>V) -> <span class="prelude-ty">Result</span><V::T> {
+<a href=#263 id=263 data-nosnippet>263</a> <span class="kw">if </span>field.extension_type_name() == <span class="prelude-val">Some</span>(VariantExtensionType::NAME) {
+<a href=#264 id=264 data-nosnippet>264</a> visitor.variant(field)
+<a href=#265 id=265 data-nosnippet>265</a> } <span class="kw">else if </span>field.extension_type_name() == <span class="prelude-val">Some</span>(UuidExtensionType::NAME) {
+<a href=#266 id=266 data-nosnippet>266</a> visitor.uuid(field)
+<a href=#267 id=267 data-nosnippet>267</a> } <span class="kw">else </span>{
+<a href=#268 id=268 data-nosnippet>268</a> visit_type(field.data_type(), visitor)
+<a href=#269 id=269 data-nosnippet>269</a> }
+<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="doccomment">/// Visit list types in post order.
+<a href=#273 id=273 data-nosnippet>273</a></span><span class="kw">fn </span>visit_list<V: ArrowSchemaVisitor>(
+<a href=#274 id=274 data-nosnippet>274</a> data_type: <span class="kw-2">&</span>DataType,
+<a href=#275 id=275 data-nosnippet>275</a> element_field: <span class="kw-2">&</span>FieldRef,
+<a href=#276 id=276 data-nosnippet>276</a> visitor: <span class="kw-2">&mut </span>V,
+<a href=#277 id=277 data-nosnippet>277</a>) -> <span class="prelude-ty">Result</span><V::T> {
+<a href=#278 id=278 data-nosnippet>278</a> visitor.before_list_element(element_field)<span class="question-mark">?</span>;
+<a href=#279 id=279 data-nosnippet>279</a> <span class="kw">let </span>value = visit_field(element_field, visitor)<span class="question-mark">?</span>;
+<a href=#280 id=280 data-nosnippet>280</a> visitor.after_list_element(element_field)<span class="question-mark">?</span>;
+<a href=#281 id=281 data-nosnippet>281</a> visitor.list(data_type, value)
+<a href=#282 id=282 data-nosnippet>282</a>}
+<a href=#283 id=283 data-nosnippet>283</a>
+<a href=#284 id=284 data-nosnippet>284</a><span class="doccomment">/// Visit struct type in post order.
+<a href=#285 id=285 data-nosnippet>285</a></span><span class="kw">fn </span>visit_struct<V: ArrowSchemaVisitor>(fields: <span class="kw-2">&</span>Fields, visitor: <span class="kw-2">&mut </span>V) -> <span class="prelude-ty">Result</span><V::T> {
+<a href=#286 id=286 data-nosnippet>286</a> <span class="kw">let </span><span class="kw-2">mut </span>results = Vec::with_capacity(fields.len());
+<a href=#287 id=287 data-nosnippet>287</a> <span class="kw">for </span>field <span class="kw">in </span>fields {
+<a href=#288 id=288 data-nosnippet>288</a> visitor.before_field(field)<span class="question-mark">?</span>;
+<a href=#289 id=289 data-nosnippet>289</a> <span class="kw">let </span>result = visit_field(field, visitor)<span class="question-mark">?</span>;
+<a href=#290 id=290 data-nosnippet>290</a> visitor.after_field(field)<span class="question-mark">?</span>;
+<a href=#291 id=291 data-nosnippet>291</a> results.push(result);
+<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><span class="doccomment">/// Convert Arrow schema to Iceberg schema.
-<a href=#295 id=295 data-nosnippet>295</a>///
-<a href=#296 id=296 data-nosnippet>296</a>/// Iceberg schema fields require a unique field id, and this function assumes that each field
-<a href=#297 id=297 data-nosnippet>297</a>/// in the provided Arrow schema contains a field id in its metadata. If the metadata is missing
-<a href=#298 id=298 data-nosnippet>298</a>/// or the field id is not set, the conversion will fail
-<a href=#299 id=299 data-nosnippet>299</a></span><span class="kw">pub fn </span>arrow_schema_to_schema(schema: <span class="kw-2">&</span>ArrowSchema) -> <span class="prelude-ty">Result</span><Schema> {
-<a href=#300 id=300 data-nosnippet>300</a> <span class="kw">let </span><span class="kw-2">mut </span>visitor = ArrowSchemaConverter::new();
-<a href=#301 id=301 data-nosnippet>301</a> visit_schema(schema, <span class="kw-2">&mut </span>visitor)
-<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><span class="doccomment">/// Convert Arrow schema to Iceberg schema with automatically assigned field IDs.
-<a href=#305 id=305 data-nosnippet>305</a>///
-<a href=#306 id=306 data-nosnippet>306</a>/// Unlike [`arrow_schema_to_schema`], this function does not require field IDs in the Arrow
-<a href=#307 id=307 data-nosnippet>307</a>/// schema metadata. Instead, it automatically assigns unique field IDs starting from 1,
-<a href=#308 id=308 data-nosnippet>308</a>/// following Iceberg's field ID assignment rules.
-<a href=#309 id=309 data-nosnippet>309</a>///
-<a href=#310 id=310 data-nosnippet>310</a>/// This is useful when converting Arrow schemas that don't originate from Iceberg tables,
-<a href=#311 id=311 data-nosnippet>311</a>/// such as schemas from DataFusion or other Arrow-based systems.
-<a href=#312 id=312 data-nosnippet>312</a></span><span class="kw">pub fn </span>arrow_schema_to_schema_auto_assign_ids(schema: <span class="kw-2">&</span>ArrowSchema) -> <span class="prelude-ty">Result</span><Schema> {
-<a href=#313 id=313 data-nosnippet>313</a> <span class="kw">let </span><span class="kw-2">mut </span>visitor = ArrowSchemaConverter::new_with_field_ids_from(FIRST_FIELD_ID);
-<a href=#314 id=314 data-nosnippet>314</a> visit_schema(schema, <span class="kw-2">&mut </span>visitor)
-<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><span class="doccomment">/// Convert Arrow type to iceberg type.
-<a href=#318 id=318 data-nosnippet>318</a></span><span class="kw">pub fn </span>arrow_type_to_type(ty: <span class="kw-2">&</span>DataType) -> <span class="prelude-ty">Result</span><Type> {
-<a href=#319 id=319 data-nosnippet>319</a> <span class="kw">let </span><span class="kw-2">mut </span>visitor = ArrowSchemaConverter::new();
-<a href=#320 id=320 data-nosnippet>320</a> visit_type(ty, <span class="kw-2">&mut </span>visitor)
-<a href=#321 id=321 data-nosnippet>321</a>}
-<a href=#322 id=322 data-nosnippet>322</a>
-<a href=#323 id=323 data-nosnippet>323</a><span class="kw">const </span>ARROW_FIELD_DOC_KEY: <span class="kw-2">&</span>str = <span class="string">"doc"</span>;
-<a href=#324 id=324 data-nosnippet>324</a>
-<a href=#325 id=325 data-nosnippet>325</a><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>try_get_field_id_from_metadata(field: <span class="kw-2">&</span>Field) -> <span class="prelude-ty">Result</span><<span class="prelude-ty">Option</span><i32>> {
-<a href=#326 id=326 data-nosnippet>326</a> field
-<a href=#327 id=327 data-nosnippet>327</a> .metadata()
-<a href=#328 id=328 data-nosnippet>328</a> .get(PARQUET_FIELD_ID_META_KEY)
-<a href=#329 id=329 data-nosnippet>329</a> .map(|value| {
-<a href=#330 id=330 data-nosnippet>330</a> value.parse::<i32>().map_err(|e| {
-<a href=#331 id=331 data-nosnippet>331</a> <span class="macro">invalid_data!</span>(<span class="string">"Failed to parse field id"</span>)
-<a href=#332 id=332 data-nosnippet>332</a> .with_context(<span class="string">"value"</span>, value)
-<a href=#333 id=333 data-nosnippet>333</a> .with_source(e)
-<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> .transpose()
-<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><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>get_field_id_from_metadata(field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><i32> {
-<a href=#340 id=340 data-nosnippet>340</a> try_get_field_id_from_metadata(field)<span class="question-mark">?
-<a href=#341 id=341 data-nosnippet>341</a> </span>.ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Field id not found in metadata"</span>))
-<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="kw">fn </span>get_field_doc(field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Option</span><String> {
-<a href=#345 id=345 data-nosnippet>345</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(value) = field.metadata().get(ARROW_FIELD_DOC_KEY) {
-<a href=#346 id=346 data-nosnippet>346</a> <span class="kw">return </span><span class="prelude-val">Some</span>(value.clone());
-<a href=#347 id=347 data-nosnippet>347</a> }
-<a href=#348 id=348 data-nosnippet>348</a> <span class="prelude-val">None
-<a href=#349 id=349 data-nosnippet>349</a></span>}
-<a href=#350 id=350 data-nosnippet>350</a>
-<a href=#351 id=351 data-nosnippet>351</a><span class="kw">struct </span>ArrowSchemaConverter {
-<a href=#352 id=352 data-nosnippet>352</a> <span class="doccomment">/// When set, the schema builder will reassign field IDs starting from this value
-<a href=#353 id=353 data-nosnippet>353</a> /// using level-order traversal (breadth-first).
-<a href=#354 id=354 data-nosnippet>354</a> </span>reassign_field_ids_from: <span class="prelude-ty">Option</span><i32>,
-<a href=#355 id=355 data-nosnippet>355</a> <span class="doccomment">/// Generates unique placeholder IDs for fields before reassignment.
-<a href=#356 id=356 data-nosnippet>356</a> /// Required because `ReassignFieldIds` builds an old-to-new ID mapping
-<a href=#357 id=357 data-nosnippet>357</a> /// that expects unique input IDs.
-<a href=#358 id=358 data-nosnippet>358</a> </span>next_field_id: i32,
-<a href=#359 id=359 data-nosnippet>359</a>}
-<a href=#360 id=360 data-nosnippet>360</a>
-<a href=#361 id=361 data-nosnippet>361</a><span class="kw">impl </span>ArrowSchemaConverter {
-<a href=#362 id=362 data-nosnippet>362</a> <span class="kw">fn </span>new() -> <span class="self">Self </span>{
-<a href=#363 id=363 data-nosnippet>363</a> <span class="self">Self </span>{
-<a href=#364 id=364 data-nosnippet>364</a> reassign_field_ids_from: <span class="prelude-val">None</span>,
-<a href=#365 id=365 data-nosnippet>365</a> next_field_id: <span class="number">0</span>,
-<a href=#366 id=366 data-nosnippet>366</a> }
-<a href=#367 id=367 data-nosnippet>367</a> }
+<a href=#294 id=294 data-nosnippet>294</a> visitor.r#struct(fields, results)
+<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="doccomment">/// Visit schema in post order.
+<a href=#298 id=298 data-nosnippet>298</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>visit_schema<V: ArrowSchemaVisitor>(
+<a href=#299 id=299 data-nosnippet>299</a> schema: <span class="kw-2">&</span>ArrowSchema,
+<a href=#300 id=300 data-nosnippet>300</a> visitor: <span class="kw-2">&mut </span>V,
+<a href=#301 id=301 data-nosnippet>301</a>) -> <span class="prelude-ty">Result</span><V::U> {
+<a href=#302 id=302 data-nosnippet>302</a> <span class="kw">let </span><span class="kw-2">mut </span>results = Vec::with_capacity(schema.fields().len());
+<a href=#303 id=303 data-nosnippet>303</a> <span class="kw">for </span>field <span class="kw">in </span>schema.fields() {
+<a href=#304 id=304 data-nosnippet>304</a> visitor.before_field(field)<span class="question-mark">?</span>;
+<a href=#305 id=305 data-nosnippet>305</a> <span class="kw">let </span>result = visit_field(field, visitor)<span class="question-mark">?</span>;
+<a href=#306 id=306 data-nosnippet>306</a> visitor.after_field(field)<span class="question-mark">?</span>;
+<a href=#307 id=307 data-nosnippet>307</a> results.push(result);
+<a href=#308 id=308 data-nosnippet>308</a> }
+<a href=#309 id=309 data-nosnippet>309</a> visitor.schema(schema, results)
+<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><span class="doccomment">/// Convert Arrow schema to Iceberg schema.
+<a href=#313 id=313 data-nosnippet>313</a>///
+<a href=#314 id=314 data-nosnippet>314</a>/// Iceberg schema fields require a unique field id, and this function assumes that each field
+<a href=#315 id=315 data-nosnippet>315</a>/// in the provided Arrow schema contains a field id in its metadata. If the metadata is missing
+<a href=#316 id=316 data-nosnippet>316</a>/// or the field id is not set, the conversion will fail
+<a href=#317 id=317 data-nosnippet>317</a></span><span class="kw">pub fn </span>arrow_schema_to_schema(schema: <span class="kw-2">&</span>ArrowSchema) -> <span class="prelude-ty">Result</span><Schema> {
+<a href=#318 id=318 data-nosnippet>318</a> <span class="kw">let </span><span class="kw-2">mut </span>visitor = ArrowSchemaConverter::new();
+<a href=#319 id=319 data-nosnippet>319</a> visit_schema(schema, <span class="kw-2">&mut </span>visitor)
+<a href=#320 id=320 data-nosnippet>320</a>}
+<a href=#321 id=321 data-nosnippet>321</a>
+<a href=#322 id=322 data-nosnippet>322</a><span class="doccomment">/// Convert Arrow schema to Iceberg schema with automatically assigned field IDs.
+<a href=#323 id=323 data-nosnippet>323</a>///
+<a href=#324 id=324 data-nosnippet>324</a>/// Unlike [`arrow_schema_to_schema`], this function does not require field IDs in the Arrow
+<a href=#325 id=325 data-nosnippet>325</a>/// schema metadata. Instead, it automatically assigns unique field IDs starting from 1,
+<a href=#326 id=326 data-nosnippet>326</a>/// following Iceberg's field ID assignment rules.
+<a href=#327 id=327 data-nosnippet>327</a>///
+<a href=#328 id=328 data-nosnippet>328</a>/// This is useful when converting Arrow schemas that don't originate from Iceberg tables,
+<a href=#329 id=329 data-nosnippet>329</a>/// such as schemas from DataFusion or other Arrow-based systems.
+<a href=#330 id=330 data-nosnippet>330</a></span><span class="kw">pub fn </span>arrow_schema_to_schema_auto_assign_ids(schema: <span class="kw-2">&</span>ArrowSchema) -> <span class="prelude-ty">Result</span><Schema> {
+<a href=#331 id=331 data-nosnippet>331</a> <span class="kw">let </span><span class="kw-2">mut </span>visitor = ArrowSchemaConverter::new_with_field_ids_from(FIRST_FIELD_ID);
+<a href=#332 id=332 data-nosnippet>332</a> visit_schema(schema, <span class="kw-2">&mut </span>visitor)
+<a href=#333 id=333 data-nosnippet>333</a>}
+<a href=#334 id=334 data-nosnippet>334</a>
+<a href=#335 id=335 data-nosnippet>335</a><span class="doccomment">/// Convert Arrow type to iceberg type.
+<a href=#336 id=336 data-nosnippet>336</a></span><span class="kw">pub fn </span>arrow_type_to_type(ty: <span class="kw-2">&</span>DataType) -> <span class="prelude-ty">Result</span><Type> {
+<a href=#337 id=337 data-nosnippet>337</a> <span class="kw">let </span><span class="kw-2">mut </span>visitor = ArrowSchemaConverter::new();
+<a href=#338 id=338 data-nosnippet>338</a> visit_type(ty, <span class="kw-2">&mut </span>visitor)
+<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="kw">const </span>ARROW_FIELD_DOC_KEY: <span class="kw-2">&</span>str = <span class="string">"doc"</span>;
+<a href=#342 id=342 data-nosnippet>342</a>
+<a href=#343 id=343 data-nosnippet>343</a><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>try_get_field_id_from_metadata(field: <span class="kw-2">&</span>Field) -> <span class="prelude-ty">Result</span><<span class="prelude-ty">Option</span><i32>> {
+<a href=#344 id=344 data-nosnippet>344</a> field
+<a href=#345 id=345 data-nosnippet>345</a> .metadata()
+<a href=#346 id=346 data-nosnippet>346</a> .get(PARQUET_FIELD_ID_META_KEY)
+<a href=#347 id=347 data-nosnippet>347</a> .map(|value| {
+<a href=#348 id=348 data-nosnippet>348</a> value.parse::<i32>().map_err(|e| {
+<a href=#349 id=349 data-nosnippet>349</a> <span class="macro">invalid_data!</span>(<span class="string">"Failed to parse field id"</span>)
+<a href=#350 id=350 data-nosnippet>350</a> .with_context(<span class="string">"value"</span>, value)
+<a href=#351 id=351 data-nosnippet>351</a> .with_source(e)
+<a href=#352 id=352 data-nosnippet>352</a> })
+<a href=#353 id=353 data-nosnippet>353</a> })
+<a href=#354 id=354 data-nosnippet>354</a> .transpose()
+<a href=#355 id=355 data-nosnippet>355</a>}
+<a href=#356 id=356 data-nosnippet>356</a>
+<a href=#357 id=357 data-nosnippet>357</a><span class="kw">pub</span>(<span class="kw">super</span>) <span class="kw">fn </span>get_field_id_from_metadata(field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><i32> {
+<a href=#358 id=358 data-nosnippet>358</a> try_get_field_id_from_metadata(field)<span class="question-mark">?
+<a href=#359 id=359 data-nosnippet>359</a> </span>.ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Field id not found in metadata"</span>))
+<a href=#360 id=360 data-nosnippet>360</a>}
+<a href=#361 id=361 data-nosnippet>361</a>
+<a href=#362 id=362 data-nosnippet>362</a><span class="kw">fn </span>get_field_doc(field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Option</span><String> {
+<a href=#363 id=363 data-nosnippet>363</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(value) = field.metadata().get(ARROW_FIELD_DOC_KEY) {
+<a href=#364 id=364 data-nosnippet>364</a> <span class="kw">return </span><span class="prelude-val">Some</span>(value.clone());
+<a href=#365 id=365 data-nosnippet>365</a> }
+<a href=#366 id=366 data-nosnippet>366</a> <span class="prelude-val">None
+<a href=#367 id=367 data-nosnippet>367</a></span>}
<a href=#368 id=368 data-nosnippet>368</a>
-<a href=#369 id=369 data-nosnippet>369</a> <span class="kw">fn </span>new_with_field_ids_from(start_from: i32) -> <span class="self">Self </span>{
-<a href=#370 id=370 data-nosnippet>370</a> <span class="self">Self </span>{
-<a href=#371 id=371 data-nosnippet>371</a> reassign_field_ids_from: <span class="prelude-val">Some</span>(start_from),
-<a href=#372 id=372 data-nosnippet>372</a> next_field_id: <span class="number">0</span>,
-<a href=#373 id=373 data-nosnippet>373</a> }
-<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> <span class="kw">fn </span>get_field_id(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><i32> {
-<a href=#377 id=377 data-nosnippet>377</a> <span class="kw">if </span><span class="self">self</span>.reassign_field_ids_from.is_some() {
-<a href=#378 id=378 data-nosnippet>378</a> <span class="comment">// Field IDs will be reassigned by the schema builder.
-<a href=#379 id=379 data-nosnippet>379</a> // We need unique temporary IDs because ReassignFieldIds builds an
-<a href=#380 id=380 data-nosnippet>380</a> // old->new ID mapping that requires unique input IDs.
-<a href=#381 id=381 data-nosnippet>381</a> </span><span class="kw">let </span>temp_id = <span class="self">self</span>.next_field_id;
-<a href=#382 id=382 data-nosnippet>382</a> <span class="self">self</span>.next_field_id += <span class="number">1</span>;
-<a href=#383 id=383 data-nosnippet>383</a> <span class="prelude-val">Ok</span>(temp_id)
-<a href=#384 id=384 data-nosnippet>384</a> } <span class="kw">else </span>{
-<a href=#385 id=385 data-nosnippet>385</a> <span class="comment">// Get field ID from arrow field metadata
-<a href=#386 id=386 data-nosnippet>386</a> </span>get_field_id_from_metadata(field)
-<a href=#387 id=387 data-nosnippet>387</a> }
-<a href=#388 id=388 data-nosnippet>388</a> }
-<a href=#389 id=389 data-nosnippet>389</a>
-<a href=#390 id=390 data-nosnippet>390</a> <span class="kw">fn </span>convert_fields(
-<a href=#391 id=391 data-nosnippet>391</a> <span class="kw-2">&mut </span><span class="self">self</span>,
-<a href=#392 id=392 data-nosnippet>392</a> fields: <span class="kw-2">&</span>Fields,
-<a href=#393 id=393 data-nosnippet>393</a> field_results: <span class="kw-2">&</span>[Type],
-<a href=#394 id=394 data-nosnippet>394</a> ) -> <span class="prelude-ty">Result</span><Vec<NestedFieldRef>> {
-<a href=#395 id=395 data-nosnippet>395</a> <span class="kw">let </span><span class="kw-2">mut </span>results = Vec::with_capacity(fields.len());
-<a href=#396 id=396 data-nosnippet>396</a> <span class="kw">for </span>i <span class="kw">in </span><span class="number">0</span>..fields.len() {
-<a href=#397 id=397 data-nosnippet>397</a> <span class="kw">let </span>field = <span class="kw-2">&</span>fields[i];
-<a href=#398 id=398 data-nosnippet>398</a> <span class="kw">let </span>field_type = <span class="kw-2">&</span>field_results[i];
-<a href=#399 id=399 data-nosnippet>399</a> <span class="kw">let </span>id = <span class="self">self</span>.get_field_id(field)<span class="question-mark">?</span>;
-<a href=#400 id=400 data-nosnippet>400</a> <span class="kw">let </span>doc = get_field_doc(field);
-<a href=#401 id=401 data-nosnippet>401</a> <span class="kw">let </span>nested_field = NestedField {
-<a href=#402 id=402 data-nosnippet>402</a> id,
-<a href=#403 id=403 data-nosnippet>403</a> doc,
-<a href=#404 id=404 data-nosnippet>404</a> name: field.name().clone(),
-<a href=#405 id=405 data-nosnippet>405</a> required: !field.is_nullable(),
-<a href=#406 id=406 data-nosnippet>406</a> field_type: Box::new(field_type.clone()),
-<a href=#407 id=407 data-nosnippet>407</a> initial_default: <span class="prelude-val">None</span>,
-<a href=#408 id=408 data-nosnippet>408</a> write_default: <span class="prelude-val">None</span>,
-<a href=#409 id=409 data-nosnippet>409</a> };
-<a href=#410 id=410 data-nosnippet>410</a> results.push(Arc::new(nested_field));
-<a href=#411 id=411 data-nosnippet>411</a> }
-<a href=#412 id=412 data-nosnippet>412</a> <span class="prelude-val">Ok</span>(results)
-<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>
-<a href=#416 id=416 data-nosnippet>416</a><span class="kw">impl </span>ArrowSchemaVisitor <span class="kw">for </span>ArrowSchemaConverter {
-<a href=#417 id=417 data-nosnippet>417</a> <span class="kw">type </span>T = Type;
-<a href=#418 id=418 data-nosnippet>418</a> <span class="kw">type </span>U = Schema;
-<a href=#419 id=419 data-nosnippet>419</a>
-<a href=#420 id=420 data-nosnippet>420</a> <span class="kw">fn </span>schema(<span class="kw-2">&mut </span><span class="self">self</span>, schema: <span class="kw-2">&</span>ArrowSchema, values: Vec<<span class="self">Self</span>::T>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::U> {
-<a href=#421 id=421 data-nosnippet>421</a> <span class="kw">let </span>fields = <span class="self">self</span>.convert_fields(schema.fields(), <span class="kw-2">&</span>values)<span class="question-mark">?</span>;
-<a href=#422 id=422 data-nosnippet>422</a> <span class="kw">let </span><span class="kw-2">mut </span>builder = Schema::builder().with_fields(fields);
-<a href=#423 id=423 data-nosnippet>423</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(start_from) = <span class="self">self</span>.reassign_field_ids_from {
-<a href=#424 id=424 data-nosnippet>424</a> builder = builder.with_reassigned_field_ids(start_from)
-<a href=#425 id=425 data-nosnippet>425</a> }
-<a href=#426 id=426 data-nosnippet>426</a> builder.build()
-<a href=#427 id=427 data-nosnippet>427</a> }
-<a href=#428 id=428 data-nosnippet>428</a>
-<a href=#429 id=429 data-nosnippet>429</a> <span class="kw">fn </span>r#struct(<span class="kw-2">&mut </span><span class="self">self</span>, fields: <span class="kw-2">&</span>Fields, results: Vec<<span class="self">Self</span>::T>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#430 id=430 data-nosnippet>430</a> <span class="kw">let </span>fields = <span class="self">self</span>.convert_fields(fields, <span class="kw-2">&</span>results)<span class="question-mark">?</span>;
-<a href=#431 id=431 data-nosnippet>431</a> <span class="prelude-val">Ok</span>(Type::Struct(StructType::new(fields)))
-<a href=#432 id=432 data-nosnippet>432</a> }
+<a href=#369 id=369 data-nosnippet>369</a><span class="kw">struct </span>ArrowSchemaConverter {
+<a href=#370 id=370 data-nosnippet>370</a> <span class="doccomment">/// When set, the schema builder will reassign field IDs starting from this value
+<a href=#371 id=371 data-nosnippet>371</a> /// using level-order traversal (breadth-first).
+<a href=#372 id=372 data-nosnippet>372</a> </span>reassign_field_ids_from: <span class="prelude-ty">Option</span><i32>,
+<a href=#373 id=373 data-nosnippet>373</a> <span class="doccomment">/// Generates unique placeholder IDs for fields before reassignment.
+<a href=#374 id=374 data-nosnippet>374</a> /// Required because `ReassignFieldIds` builds an old-to-new ID mapping
+<a href=#375 id=375 data-nosnippet>375</a> /// that expects unique input IDs.
+<a href=#376 id=376 data-nosnippet>376</a> </span>next_field_id: i32,
+<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><span class="kw">impl </span>ArrowSchemaConverter {
+<a href=#380 id=380 data-nosnippet>380</a> <span class="kw">fn </span>new() -> <span class="self">Self </span>{
+<a href=#381 id=381 data-nosnippet>381</a> <span class="self">Self </span>{
+<a href=#382 id=382 data-nosnippet>382</a> reassign_field_ids_from: <span class="prelude-val">None</span>,
+<a href=#383 id=383 data-nosnippet>383</a> next_field_id: <span class="number">0</span>,
+<a href=#384 id=384 data-nosnippet>384</a> }
+<a href=#385 id=385 data-nosnippet>385</a> }
+<a href=#386 id=386 data-nosnippet>386</a>
+<a href=#387 id=387 data-nosnippet>387</a> <span class="kw">fn </span>new_with_field_ids_from(start_from: i32) -> <span class="self">Self </span>{
+<a href=#388 id=388 data-nosnippet>388</a> <span class="self">Self </span>{
+<a href=#389 id=389 data-nosnippet>389</a> reassign_field_ids_from: <span class="prelude-val">Some</span>(start_from),
+<a href=#390 id=390 data-nosnippet>390</a> next_field_id: <span class="number">0</span>,
+<a href=#391 id=391 data-nosnippet>391</a> }
+<a href=#392 id=392 data-nosnippet>392</a> }
+<a href=#393 id=393 data-nosnippet>393</a>
+<a href=#394 id=394 data-nosnippet>394</a> <span class="kw">fn </span>get_field_id(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><i32> {
+<a href=#395 id=395 data-nosnippet>395</a> <span class="kw">if </span><span class="self">self</span>.reassign_field_ids_from.is_some() {
+<a href=#396 id=396 data-nosnippet>396</a> <span class="comment">// Field IDs will be reassigned by the schema builder.
+<a href=#397 id=397 data-nosnippet>397</a> // We need unique temporary IDs because ReassignFieldIds builds an
+<a href=#398 id=398 data-nosnippet>398</a> // old->new ID mapping that requires unique input IDs.
+<a href=#399 id=399 data-nosnippet>399</a> </span><span class="kw">let </span>temp_id = <span class="self">self</span>.next_field_id;
+<a href=#400 id=400 data-nosnippet>400</a> <span class="self">self</span>.next_field_id += <span class="number">1</span>;
+<a href=#401 id=401 data-nosnippet>401</a> <span class="prelude-val">Ok</span>(temp_id)
+<a href=#402 id=402 data-nosnippet>402</a> } <span class="kw">else </span>{
+<a href=#403 id=403 data-nosnippet>403</a> <span class="comment">// Get field ID from arrow field metadata
+<a href=#404 id=404 data-nosnippet>404</a> </span>get_field_id_from_metadata(field)
+<a href=#405 id=405 data-nosnippet>405</a> }
+<a href=#406 id=406 data-nosnippet>406</a> }
+<a href=#407 id=407 data-nosnippet>407</a>
+<a href=#408 id=408 data-nosnippet>408</a> <span class="kw">fn </span>convert_fields(
+<a href=#409 id=409 data-nosnippet>409</a> <span class="kw-2">&mut </span><span class="self">self</span>,
+<a href=#410 id=410 data-nosnippet>410</a> fields: <span class="kw-2">&</span>Fields,
+<a href=#411 id=411 data-nosnippet>411</a> field_results: <span class="kw-2">&</span>[Type],
+<a href=#412 id=412 data-nosnippet>412</a> ) -> <span class="prelude-ty">Result</span><Vec<NestedFieldRef>> {
+<a href=#413 id=413 data-nosnippet>413</a> <span class="kw">let </span><span class="kw-2">mut </span>results = Vec::with_capacity(fields.len());
+<a href=#414 id=414 data-nosnippet>414</a> <span class="kw">for </span>i <span class="kw">in </span><span class="number">0</span>..fields.len() {
+<a href=#415 id=415 data-nosnippet>415</a> <span class="kw">let </span>field = <span class="kw-2">&</span>fields[i];
+<a href=#416 id=416 data-nosnippet>416</a> <span class="kw">let </span>field_type = <span class="kw-2">&</span>field_results[i];
+<a href=#417 id=417 data-nosnippet>417</a> <span class="kw">let </span>id = <span class="self">self</span>.get_field_id(field)<span class="question-mark">?</span>;
+<a href=#418 id=418 data-nosnippet>418</a> <span class="kw">let </span>doc = get_field_doc(field);
+<a href=#419 id=419 data-nosnippet>419</a> <span class="kw">let </span>nested_field = NestedField {
+<a href=#420 id=420 data-nosnippet>420</a> id,
+<a href=#421 id=421 data-nosnippet>421</a> doc,
+<a href=#422 id=422 data-nosnippet>422</a> name: field.name().clone(),
+<a href=#423 id=423 data-nosnippet>423</a> required: !field.is_nullable(),
+<a href=#424 id=424 data-nosnippet>424</a> field_type: Box::new(field_type.clone()),
+<a href=#425 id=425 data-nosnippet>425</a> initial_default: <span class="prelude-val">None</span>,
+<a href=#426 id=426 data-nosnippet>426</a> write_default: <span class="prelude-val">None</span>,
+<a href=#427 id=427 data-nosnippet>427</a> };
+<a href=#428 id=428 data-nosnippet>428</a> results.push(Arc::new(nested_field));
+<a href=#429 id=429 data-nosnippet>429</a> }
+<a href=#430 id=430 data-nosnippet>430</a> <span class="prelude-val">Ok</span>(results)
+<a href=#431 id=431 data-nosnippet>431</a> }
+<a href=#432 id=432 data-nosnippet>432</a>}
<a href=#433 id=433 data-nosnippet>433</a>
-<a href=#434 id=434 data-nosnippet>434</a> <span class="kw">fn </span>list(<span class="kw-2">&mut </span><span class="self">self</span>, list: <span class="kw-2">&</span>DataType, value: <span class="self">Self</span>::T) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#435 id=435 data-nosnippet>435</a> <span class="kw">let </span>element_field = <span class="kw">match </span>list {
-<a href=#436 id=436 data-nosnippet>436</a> DataType::List(element_field) => element_field,
-<a href=#437 id=437 data-nosnippet>437</a> DataType::LargeList(element_field) => element_field,
-<a href=#438 id=438 data-nosnippet>438</a> DataType::FixedSizeList(element_field, <span class="kw">_</span>) => element_field,
-<a href=#439 id=439 data-nosnippet>439</a> <span class="kw">_ </span>=> {
-<a href=#440 id=440 data-nosnippet>440</a> <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"List type must have list data type"</span>));
-<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>
-<a href=#444 id=444 data-nosnippet>444</a> <span class="kw">let </span>id = <span class="self">self</span>.get_field_id(element_field)<span class="question-mark">?</span>;
-<a href=#445 id=445 data-nosnippet>445</a> <span class="kw">let </span>doc = get_field_doc(element_field);
-<a href=#446 id=446 data-nosnippet>446</a> <span class="kw">let </span><span class="kw-2">mut </span>element_field =
-<a href=#447 id=447 data-nosnippet>447</a> NestedField::list_element(id, value.clone(), !element_field.is_nullable());
-<a href=#448 id=448 data-nosnippet>448</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(doc) = doc {
-<a href=#449 id=449 data-nosnippet>449</a> element_field = element_field.with_doc(doc);
-<a href=#450 id=450 data-nosnippet>450</a> }
-<a href=#451 id=451 data-nosnippet>451</a> <span class="kw">let </span>element_field = Arc::new(element_field);
-<a href=#452 id=452 data-nosnippet>452</a> <span class="prelude-val">Ok</span>(Type::List(ListType { element_field }))
-<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> <span class="kw">fn </span>map(<span class="kw-2">&mut </span><span class="self">self</span>, map: <span class="kw-2">&</span>DataType, key_value: <span class="self">Self</span>::T, value: <span class="self">Self</span>::T) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#456 id=456 data-nosnippet>456</a> <span class="kw">match </span>map {
-<a href=#457 id=457 data-nosnippet>457</a> DataType::Map(field, <span class="kw">_</span>) => <span class="kw">match </span>field.data_type() {
-<a href=#458 id=458 data-nosnippet>458</a> DataType::Struct(fields) => {
-<a href=#459 id=459 data-nosnippet>459</a> <span class="kw">if </span>fields.len() != <span class="number">2 </span>{
-<a href=#460 id=460 data-nosnippet>460</a> <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map field must have exactly 2 fields"</span>));
-<a href=#461 id=461 data-nosnippet>461</a> }
-<a href=#462 id=462 data-nosnippet>462</a>
-<a href=#463 id=463 data-nosnippet>463</a> <span class="kw">let </span>key_field = <span class="kw-2">&</span>fields[<span class="number">0</span>];
-<a href=#464 id=464 data-nosnippet>464</a> <span class="kw">let </span>value_field = <span class="kw-2">&</span>fields[<span class="number">1</span>];
-<a href=#465 id=465 data-nosnippet>465</a>
-<a href=#466 id=466 data-nosnippet>466</a> <span class="kw">let </span>key_id = <span class="self">self</span>.get_field_id(key_field)<span class="question-mark">?</span>;
-<a href=#467 id=467 data-nosnippet>467</a> <span class="kw">let </span>key_doc = get_field_doc(key_field);
-<a href=#468 id=468 data-nosnippet>468</a> <span class="kw">let </span><span class="kw-2">mut </span>key_field = NestedField::map_key_element(key_id, key_value.clone());
-<a href=#469 id=469 data-nosnippet>469</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(doc) = key_doc {
-<a href=#470 id=470 data-nosnippet>470</a> key_field = key_field.with_doc(doc);
-<a href=#471 id=471 data-nosnippet>471</a> }
-<a href=#472 id=472 data-nosnippet>472</a> <span class="kw">let </span>key_field = Arc::new(key_field);
-<a href=#473 id=473 data-nosnippet>473</a>
-<a href=#474 id=474 data-nosnippet>474</a> <span class="kw">let </span>value_id = <span class="self">self</span>.get_field_id(value_field)<span class="question-mark">?</span>;
-<a href=#475 id=475 data-nosnippet>475</a> <span class="kw">let </span>value_doc = get_field_doc(value_field);
-<a href=#476 id=476 data-nosnippet>476</a> <span class="kw">let </span><span class="kw-2">mut </span>value_field = NestedField::map_value_element(
-<a href=#477 id=477 data-nosnippet>477</a> value_id,
-<a href=#478 id=478 data-nosnippet>478</a> value.clone(),
-<a href=#479 id=479 data-nosnippet>479</a> !value_field.is_nullable(),
-<a href=#480 id=480 data-nosnippet>480</a> );
-<a href=#481 id=481 data-nosnippet>481</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(doc) = value_doc {
-<a href=#482 id=482 data-nosnippet>482</a> value_field = value_field.with_doc(doc);
-<a href=#483 id=483 data-nosnippet>483</a> }
-<a href=#484 id=484 data-nosnippet>484</a> <span class="kw">let </span>value_field = Arc::new(value_field);
-<a href=#485 id=485 data-nosnippet>485</a>
-<a href=#486 id=486 data-nosnippet>486</a> <span class="prelude-val">Ok</span>(Type::Map(MapType {
-<a href=#487 id=487 data-nosnippet>487</a> key_field,
-<a href=#488 id=488 data-nosnippet>488</a> value_field,
-<a href=#489 id=489 data-nosnippet>489</a> }))
-<a href=#490 id=490 data-nosnippet>490</a> }
-<a href=#491 id=491 data-nosnippet>491</a> <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map field must have struct type"</span>)),
-<a href=#492 id=492 data-nosnippet>492</a> },
-<a href=#493 id=493 data-nosnippet>493</a> <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map type must have map data type"</span>)),
-<a href=#494 id=494 data-nosnippet>494</a> }
-<a href=#495 id=495 data-nosnippet>495</a> }
-<a href=#496 id=496 data-nosnippet>496</a>
-<a href=#497 id=497 data-nosnippet>497</a> <span class="kw">fn </span>primitive(<span class="kw-2">&mut </span><span class="self">self</span>, p: <span class="kw-2">&</span>DataType) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#498 id=498 data-nosnippet>498</a> <span class="kw">match </span>p {
-<a href=#499 id=499 data-nosnippet>499</a> DataType::Null => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Unknown)),
-<a href=#500 id=500 data-nosnippet>500</a> DataType::Boolean => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Boolean)),
-<a href=#501 id=501 data-nosnippet>501</a> DataType::Int8 | DataType::Int16 | DataType::Int32 => {
-<a href=#502 id=502 data-nosnippet>502</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Int))
-<a href=#503 id=503 data-nosnippet>503</a> }
-<a href=#504 id=504 data-nosnippet>504</a> DataType::UInt8 | DataType::UInt16 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Int)),
-<a href=#505 id=505 data-nosnippet>505</a> DataType::UInt32 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Long)),
-<a href=#506 id=506 data-nosnippet>506</a> DataType::Int64 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Long)),
-<a href=#507 id=507 data-nosnippet>507</a> DataType::UInt64 => {
-<a href=#508 id=508 data-nosnippet>508</a> <span class="comment">// Block uint64 - no safe casting option
-<a href=#509 id=509 data-nosnippet>509</a> </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(
-<a href=#510 id=510 data-nosnippet>510</a> <span class="string">"UInt64 is not supported. Use Int64 for values ≤ 9,223,372,036,854,775,807 or Decimal(20,0) for full uint64 range."
-<a href=#511 id=511 data-nosnippet>511</a> </span>))
-<a href=#512 id=512 data-nosnippet>512</a> }
-<a href=#513 id=513 data-nosnippet>513</a> DataType::Float32 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Float)),
-<a href=#514 id=514 data-nosnippet>514</a> DataType::Float64 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Double)),
-<a href=#515 id=515 data-nosnippet>515</a> DataType::Decimal128(p, s) => Type::decimal(<span class="kw-2">*</span>p <span class="kw">as </span>u32, <span class="kw-2">*</span>s <span class="kw">as </span>u32)
-<a href=#516 id=516 data-nosnippet>516</a> .map_err(|e| <span class="macro">invalid_data!</span>(<span class="string">"Failed to create decimal type"</span>).with_source(e)),
-<a href=#517 id=517 data-nosnippet>517</a> DataType::Date32 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Date)),
-<a href=#518 id=518 data-nosnippet>518</a> DataType::Time64(unit) <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Microsecond => {
-<a href=#519 id=519 data-nosnippet>519</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Time))
-<a href=#520 id=520 data-nosnippet>520</a> }
-<a href=#521 id=521 data-nosnippet>521</a> DataType::Timestamp(unit, <span class="prelude-val">None</span>) <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Microsecond => {
-<a href=#522 id=522 data-nosnippet>522</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Timestamp))
-<a href=#523 id=523 data-nosnippet>523</a> }
-<a href=#524 id=524 data-nosnippet>524</a> DataType::Timestamp(unit, <span class="prelude-val">None</span>) <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Nanosecond => {
-<a href=#525 id=525 data-nosnippet>525</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::TimestampNs))
-<a href=#526 id=526 data-nosnippet>526</a> }
-<a href=#527 id=527 data-nosnippet>527</a> DataType::Timestamp(unit, <span class="prelude-val">Some</span>(zone))
-<a href=#528 id=528 data-nosnippet>528</a> <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Microsecond
-<a href=#529 id=529 data-nosnippet>529</a> && (zone.as_ref() == <span class="string">"UTC" </span>|| zone.as_ref() == <span class="string">"+00:00"</span>) =>
-<a href=#530 id=530 data-nosnippet>530</a> {
-<a href=#531 id=531 data-nosnippet>531</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Timestamptz))
-<a href=#532 id=532 data-nosnippet>532</a> }
-<a href=#533 id=533 data-nosnippet>533</a> DataType::Timestamp(unit, <span class="prelude-val">Some</span>(zone))
-<a href=#534 id=534 data-nosnippet>534</a> <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Nanosecond
-<a href=#535 id=535 data-nosnippet>535</a> && (zone.as_ref() == <span class="string">"UTC" </span>|| zone.as_ref() == <span class="string">"+00:00"</span>) =>
-<a href=#536 id=536 data-nosnippet>536</a> {
-<a href=#537 id=537 data-nosnippet>537</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::TimestamptzNs))
+<a href=#434 id=434 data-nosnippet>434</a><span class="kw">impl </span>ArrowSchemaVisitor <span class="kw">for </span>ArrowSchemaConverter {
+<a href=#435 id=435 data-nosnippet>435</a> <span class="kw">type </span>T = Type;
+<a href=#436 id=436 data-nosnippet>436</a> <span class="kw">type </span>U = Schema;
+<a href=#437 id=437 data-nosnippet>437</a>
+<a href=#438 id=438 data-nosnippet>438</a> <span class="kw">fn </span>schema(<span class="kw-2">&mut </span><span class="self">self</span>, schema: <span class="kw-2">&</span>ArrowSchema, values: Vec<<span class="self">Self</span>::T>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::U> {
+<a href=#439 id=439 data-nosnippet>439</a> <span class="kw">let </span>fields = <span class="self">self</span>.convert_fields(schema.fields(), <span class="kw-2">&</span>values)<span class="question-mark">?</span>;
+<a href=#440 id=440 data-nosnippet>440</a> <span class="kw">let </span><span class="kw-2">mut </span>builder = Schema::builder().with_fields(fields);
+<a href=#441 id=441 data-nosnippet>441</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(start_from) = <span class="self">self</span>.reassign_field_ids_from {
+<a href=#442 id=442 data-nosnippet>442</a> builder = builder.with_reassigned_field_ids(start_from)
+<a href=#443 id=443 data-nosnippet>443</a> }
+<a href=#444 id=444 data-nosnippet>444</a> builder.build()
+<a href=#445 id=445 data-nosnippet>445</a> }
+<a href=#446 id=446 data-nosnippet>446</a>
+<a href=#447 id=447 data-nosnippet>447</a> <span class="kw">fn </span>r#struct(<span class="kw-2">&mut </span><span class="self">self</span>, fields: <span class="kw-2">&</span>Fields, results: Vec<<span class="self">Self</span>::T>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#448 id=448 data-nosnippet>448</a> <span class="kw">let </span>fields = <span class="self">self</span>.convert_fields(fields, <span class="kw-2">&</span>results)<span class="question-mark">?</span>;
+<a href=#449 id=449 data-nosnippet>449</a> <span class="prelude-val">Ok</span>(Type::Struct(StructType::new(fields)))
+<a href=#450 id=450 data-nosnippet>450</a> }
+<a href=#451 id=451 data-nosnippet>451</a>
+<a href=#452 id=452 data-nosnippet>452</a> <span class="kw">fn </span>list(<span class="kw-2">&mut </span><span class="self">self</span>, list: <span class="kw-2">&</span>DataType, value: <span class="self">Self</span>::T) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#453 id=453 data-nosnippet>453</a> <span class="kw">let </span>element_field = <span class="kw">match </span>list {
+<a href=#454 id=454 data-nosnippet>454</a> DataType::List(element_field) => element_field,
+<a href=#455 id=455 data-nosnippet>455</a> DataType::LargeList(element_field) => element_field,
+<a href=#456 id=456 data-nosnippet>456</a> DataType::FixedSizeList(element_field, <span class="kw">_</span>) => element_field,
+<a href=#457 id=457 data-nosnippet>457</a> <span class="kw">_ </span>=> {
+<a href=#458 id=458 data-nosnippet>458</a> <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"List type must have list data type"</span>));
+<a href=#459 id=459 data-nosnippet>459</a> }
+<a href=#460 id=460 data-nosnippet>460</a> };
+<a href=#461 id=461 data-nosnippet>461</a>
+<a href=#462 id=462 data-nosnippet>462</a> <span class="kw">let </span>id = <span class="self">self</span>.get_field_id(element_field)<span class="question-mark">?</span>;
+<a href=#463 id=463 data-nosnippet>463</a> <span class="kw">let </span>doc = get_field_doc(element_field);
+<a href=#464 id=464 data-nosnippet>464</a> <span class="kw">let </span><span class="kw-2">mut </span>element_field =
+<a href=#465 id=465 data-nosnippet>465</a> NestedField::list_element(id, value.clone(), !element_field.is_nullable());
+<a href=#466 id=466 data-nosnippet>466</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(doc) = doc {
+<a href=#467 id=467 data-nosnippet>467</a> element_field = element_field.with_doc(doc);
+<a href=#468 id=468 data-nosnippet>468</a> }
+<a href=#469 id=469 data-nosnippet>469</a> <span class="kw">let </span>element_field = Arc::new(element_field);
+<a href=#470 id=470 data-nosnippet>470</a> <span class="prelude-val">Ok</span>(Type::List(ListType { element_field }))
+<a href=#471 id=471 data-nosnippet>471</a> }
+<a href=#472 id=472 data-nosnippet>472</a>
+<a href=#473 id=473 data-nosnippet>473</a> <span class="kw">fn </span>map(<span class="kw-2">&mut </span><span class="self">self</span>, map: <span class="kw-2">&</span>DataType, key_value: <span class="self">Self</span>::T, value: <span class="self">Self</span>::T) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#474 id=474 data-nosnippet>474</a> <span class="kw">match </span>map {
+<a href=#475 id=475 data-nosnippet>475</a> DataType::Map(field, <span class="kw">_</span>) => <span class="kw">match </span>field.data_type() {
+<a href=#476 id=476 data-nosnippet>476</a> DataType::Struct(fields) => {
+<a href=#477 id=477 data-nosnippet>477</a> <span class="kw">if </span>fields.len() != <span class="number">2 </span>{
+<a href=#478 id=478 data-nosnippet>478</a> <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map field must have exactly 2 fields"</span>));
+<a href=#479 id=479 data-nosnippet>479</a> }
+<a href=#480 id=480 data-nosnippet>480</a>
+<a href=#481 id=481 data-nosnippet>481</a> <span class="kw">let </span>key_field = <span class="kw-2">&</span>fields[<span class="number">0</span>];
+<a href=#482 id=482 data-nosnippet>482</a> <span class="kw">let </span>value_field = <span class="kw-2">&</span>fields[<span class="number">1</span>];
+<a href=#483 id=483 data-nosnippet>483</a>
+<a href=#484 id=484 data-nosnippet>484</a> <span class="kw">let </span>key_id = <span class="self">self</span>.get_field_id(key_field)<span class="question-mark">?</span>;
+<a href=#485 id=485 data-nosnippet>485</a> <span class="kw">let </span>key_doc = get_field_doc(key_field);
+<a href=#486 id=486 data-nosnippet>486</a> <span class="kw">let </span><span class="kw-2">mut </span>key_field = NestedField::map_key_element(key_id, key_value.clone());
+<a href=#487 id=487 data-nosnippet>487</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(doc) = key_doc {
+<a href=#488 id=488 data-nosnippet>488</a> key_field = key_field.with_doc(doc);
+<a href=#489 id=489 data-nosnippet>489</a> }
+<a href=#490 id=490 data-nosnippet>490</a> <span class="kw">let </span>key_field = Arc::new(key_field);
+<a href=#491 id=491 data-nosnippet>491</a>
+<a href=#492 id=492 data-nosnippet>492</a> <span class="kw">let </span>value_id = <span class="self">self</span>.get_field_id(value_field)<span class="question-mark">?</span>;
+<a href=#493 id=493 data-nosnippet>493</a> <span class="kw">let </span>value_doc = get_field_doc(value_field);
+<a href=#494 id=494 data-nosnippet>494</a> <span class="kw">let </span><span class="kw-2">mut </span>value_field = NestedField::map_value_element(
+<a href=#495 id=495 data-nosnippet>495</a> value_id,
+<a href=#496 id=496 data-nosnippet>496</a> value.clone(),
+<a href=#497 id=497 data-nosnippet>497</a> !value_field.is_nullable(),
+<a href=#498 id=498 data-nosnippet>498</a> );
+<a href=#499 id=499 data-nosnippet>499</a> <span class="kw">if let </span><span class="prelude-val">Some</span>(doc) = value_doc {
+<a href=#500 id=500 data-nosnippet>500</a> value_field = value_field.with_doc(doc);
+<a href=#501 id=501 data-nosnippet>501</a> }
+<a href=#502 id=502 data-nosnippet>502</a> <span class="kw">let </span>value_field = Arc::new(value_field);
+<a href=#503 id=503 data-nosnippet>503</a>
+<a href=#504 id=504 data-nosnippet>504</a> <span class="prelude-val">Ok</span>(Type::Map(MapType {
+<a href=#505 id=505 data-nosnippet>505</a> key_field,
+<a href=#506 id=506 data-nosnippet>506</a> value_field,
+<a href=#507 id=507 data-nosnippet>507</a> }))
+<a href=#508 id=508 data-nosnippet>508</a> }
+<a href=#509 id=509 data-nosnippet>509</a> <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map field must have struct type"</span>)),
+<a href=#510 id=510 data-nosnippet>510</a> },
+<a href=#511 id=511 data-nosnippet>511</a> <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Map type must have map data type"</span>)),
+<a href=#512 id=512 data-nosnippet>512</a> }
+<a href=#513 id=513 data-nosnippet>513</a> }
+<a href=#514 id=514 data-nosnippet>514</a>
+<a href=#515 id=515 data-nosnippet>515</a> <span class="kw">fn </span>primitive(<span class="kw-2">&mut </span><span class="self">self</span>, p: <span class="kw-2">&</span>DataType) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#516 id=516 data-nosnippet>516</a> <span class="kw">match </span>p {
+<a href=#517 id=517 data-nosnippet>517</a> DataType::Null => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Unknown)),
+<a href=#518 id=518 data-nosnippet>518</a> DataType::Boolean => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Boolean)),
+<a href=#519 id=519 data-nosnippet>519</a> DataType::Int8 | DataType::Int16 | DataType::Int32 => {
+<a href=#520 id=520 data-nosnippet>520</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Int))
+<a href=#521 id=521 data-nosnippet>521</a> }
+<a href=#522 id=522 data-nosnippet>522</a> DataType::UInt8 | DataType::UInt16 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Int)),
+<a href=#523 id=523 data-nosnippet>523</a> DataType::UInt32 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Long)),
+<a href=#524 id=524 data-nosnippet>524</a> DataType::Int64 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Long)),
+<a href=#525 id=525 data-nosnippet>525</a> DataType::UInt64 => {
+<a href=#526 id=526 data-nosnippet>526</a> <span class="comment">// Block uint64 - no safe casting option
+<a href=#527 id=527 data-nosnippet>527</a> </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(
+<a href=#528 id=528 data-nosnippet>528</a> <span class="string">"UInt64 is not supported. Use Int64 for values ≤ 9,223,372,036,854,775,807 or Decimal(20,0) for full uint64 range."
+<a href=#529 id=529 data-nosnippet>529</a> </span>))
+<a href=#530 id=530 data-nosnippet>530</a> }
+<a href=#531 id=531 data-nosnippet>531</a> DataType::Float32 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Float)),
+<a href=#532 id=532 data-nosnippet>532</a> DataType::Float64 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Double)),
+<a href=#533 id=533 data-nosnippet>533</a> DataType::Decimal128(p, s) => Type::decimal(<span class="kw-2">*</span>p <span class="kw">as </span>u32, <span class="kw-2">*</span>s <span class="kw">as </span>u32)
+<a href=#534 id=534 data-nosnippet>534</a> .map_err(|e| <span class="macro">invalid_data!</span>(<span class="string">"Failed to create decimal type"</span>).with_source(e)),
+<a href=#535 id=535 data-nosnippet>535</a> DataType::Date32 => <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Date)),
+<a href=#536 id=536 data-nosnippet>536</a> DataType::Time64(unit) <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Microsecond => {
+<a href=#537 id=537 data-nosnippet>537</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Time))
<a href=#538 id=538 data-nosnippet>538</a> }
-<a href=#539 id=539 data-nosnippet>539</a> DataType::Binary | DataType::LargeBinary | DataType::BinaryView => {
-<a href=#540 id=540 data-nosnippet>540</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Binary))
+<a href=#539 id=539 data-nosnippet>539</a> DataType::Timestamp(unit, <span class="prelude-val">None</span>) <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Microsecond => {
+<a href=#540 id=540 data-nosnippet>540</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Timestamp))
<a href=#541 id=541 data-nosnippet>541</a> }
-<a href=#542 id=542 data-nosnippet>542</a> DataType::FixedSizeBinary(width) => {
-<a href=#543 id=543 data-nosnippet>543</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Fixed(<span class="kw-2">*</span>width <span class="kw">as </span>u64)))
+<a href=#542 id=542 data-nosnippet>542</a> DataType::Timestamp(unit, <span class="prelude-val">None</span>) <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Nanosecond => {
+<a href=#543 id=543 data-nosnippet>543</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::TimestampNs))
<a href=#544 id=544 data-nosnippet>544</a> }
-<a href=#545 id=545 data-nosnippet>545</a> DataType::Utf8View | DataType::Utf8 | DataType::LargeUtf8 => {
-<a href=#546 id=546 data-nosnippet>546</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::String))
-<a href=#547 id=547 data-nosnippet>547</a> }
-<a href=#548 id=548 data-nosnippet>548</a> <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Unsupported Arrow data type: {p}"</span>)),
-<a href=#549 id=549 data-nosnippet>549</a> }
-<a href=#550 id=550 data-nosnippet>550</a> }
-<a href=#551 id=551 data-nosnippet>551</a>
-<a href=#552 id=552 data-nosnippet>552</a> <span class="kw">fn </span>variant(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#553 id=553 data-nosnippet>553</a> <span class="comment">// The extension may only sit on struct storage (mirrors
-<a href=#554 id=554 data-nosnippet>554</a> // `VariantExtensionType::supports_data_type`).
-<a href=#555 id=555 data-nosnippet>555</a> </span><span class="kw">if </span>!<span class="macro">matches!</span>(field.data_type(), DataType::Struct(<span class="kw">_</span>)) {
-<a href=#556 id=556 data-nosnippet>556</a> <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(
-<a href=#557 id=557 data-nosnippet>557</a> <span class="string">"arrow.parquet.variant extension requires Struct storage"
-<a href=#558 id=558 data-nosnippet>558</a> </span>));
-<a href=#559 id=559 data-nosnippet>559</a> }
-<a href=#560 id=560 data-nosnippet>560</a> <span class="comment">// Fold the whole struct into a single logical variant without descending:
-<a href=#561 id=561 data-nosnippet>561</a> // the storage sub-fields carry no Iceberg field id, so visiting them would
-<a href=#562 id=562 data-nosnippet>562</a> // fail. The enclosing field's own id is read by the caller.
-<a href=#563 id=563 data-nosnippet>563</a> </span><span class="prelude-val">Ok</span>(Type::Variant(VariantType))
-<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="kw">struct </span>ToArrowSchemaConverter;
-<a href=#568 id=568 data-nosnippet>568</a>
-<a href=#569 id=569 data-nosnippet>569</a><span class="kw">enum </span>ArrowSchemaOrFieldOrType {
-<a href=#570 id=570 data-nosnippet>570</a> Schema(ArrowSchema),
-<a href=#571 id=571 data-nosnippet>571</a> Field(Field),
-<a href=#572 id=572 data-nosnippet>572</a> Type(DataType),
-<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">impl </span>SchemaVisitor <span class="kw">for </span>ToArrowSchemaConverter {
-<a href=#576 id=576 data-nosnippet>576</a> <span class="kw">type </span>T = ArrowSchemaOrFieldOrType;
-<a href=#577 id=577 data-nosnippet>577</a>
-<a href=#578 id=578 data-nosnippet>578</a> <span class="kw">fn </span>schema(
-<a href=#579 id=579 data-nosnippet>579</a> <span class="kw-2">&mut </span><span class="self">self</span>,
-<a href=#580 id=580 data-nosnippet>580</a> _schema: <span class="kw-2">&</span>Schema,
-<a href=#581 id=581 data-nosnippet>581</a> value: ArrowSchemaOrFieldOrType,
-<a href=#582 id=582 data-nosnippet>582</a> ) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
-<a href=#583 id=583 data-nosnippet>583</a> <span class="kw">let </span>struct_type = <span class="kw">match </span>value {
-<a href=#584 id=584 data-nosnippet>584</a> ArrowSchemaOrFieldOrType::Type(DataType::Struct(fields)) => fields,
-<a href=#585 id=585 data-nosnippet>585</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
-<a href=#586 id=586 data-nosnippet>586</a> };
-<a href=#587 id=587 data-nosnippet>587</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Schema(ArrowSchema::new(
-<a href=#588 id=588 data-nosnippet>588</a> struct_type,
-<a href=#589 id=589 data-nosnippet>589</a> )))
-<a href=#590 id=590 data-nosnippet>590</a> }
-<a href=#591 id=591 data-nosnippet>591</a>
-<a href=#592 id=592 data-nosnippet>592</a> <span class="kw">fn </span>field(
-<a href=#593 id=593 data-nosnippet>593</a> <span class="kw-2">&mut </span><span class="self">self</span>,
-<a href=#594 id=594 data-nosnippet>594</a> field: <span class="kw-2">&</span>NestedFieldRef,
-<a href=#595 id=595 data-nosnippet>595</a> value: ArrowSchemaOrFieldOrType,
-<a href=#596 id=596 data-nosnippet>596</a> ) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
-<a href=#597 id=597 data-nosnippet>597</a> <span class="kw">let </span>ty = <span class="kw">match </span>value {
-<a href=#598 id=598 data-nosnippet>598</a> ArrowSchemaOrFieldOrType::Type(ty) => ty,
-<a href=#599 id=599 data-nosnippet>599</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
-<a href=#600 id=600 data-nosnippet>600</a> };
-<a href=#601 id=601 data-nosnippet>601</a> <span class="kw">let </span>metadata = <span class="kw">if let </span><span class="prelude-val">Some</span>(doc) = <span class="kw-2">&</span>field.doc {
-<a href=#602 id=602 data-nosnippet>602</a> HashMap::from([
-<a href=#603 id=603 data-nosnippet>603</a> (PARQUET_FIELD_ID_META_KEY.to_string(), field.id.to_string()),
-<a href=#604 id=604 data-nosnippet>604</a> (ARROW_FIELD_DOC_KEY.to_string(), doc.clone()),
-<a href=#605 id=605 data-nosnippet>605</a> ])
-<a href=#606 id=606 data-nosnippet>606</a> } <span class="kw">else </span>{
-<a href=#607 id=607 data-nosnippet>607</a> HashMap::from([(PARQUET_FIELD_ID_META_KEY.to_string(), field.id.to_string())])
-<a href=#608 id=608 data-nosnippet>608</a> };
-<a href=#609 id=609 data-nosnippet>609</a> <span class="kw">let </span>arrow_field =
-<a href=#610 id=610 data-nosnippet>610</a> Field::new(field.name.clone(), ty, !field.required).with_metadata(metadata);
-<a href=#611 id=611 data-nosnippet>611</a> <span class="comment">// A variant column's storage is a struct; tag the field with the canonical
-<a href=#612 id=612 data-nosnippet>612</a> // `arrow.parquet.variant` extension type so consumers read it as a Variant, not a struct.
-<a href=#613 id=613 data-nosnippet>613</a> </span><span class="kw">let </span>arrow_field = <span class="kw">if </span>field.field_type.is_variant() {
-<a href=#614 id=614 data-nosnippet>614</a> arrow_field.with_extension_type(VariantExtensionType)
-<a href=#615 id=615 data-nosnippet>615</a> } <span class="kw">else </span>{
-<a href=#616 id=616 data-nosnippet>616</a> arrow_field
-<a href=#617 id=617 data-nosnippet>617</a> };
-<a href=#618 id=618 data-nosnippet>618</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Field(arrow_field))
-<a href=#619 id=619 data-nosnippet>619</a> }
-<a href=#620 id=620 data-nosnippet>620</a>
-<a href=#621 id=621 data-nosnippet>621</a> <span class="kw">fn </span>r#struct(
-<a href=#622 id=622 data-nosnippet>622</a> <span class="kw-2">&mut </span><span class="self">self</span>,
-<a href=#623 id=623 data-nosnippet>623</a> <span class="kw">_</span>: <span class="kw-2">&</span>StructType,
-<a href=#624 id=624 data-nosnippet>624</a> results: Vec<ArrowSchemaOrFieldOrType>,
-<a href=#625 id=625 data-nosnippet>625</a> ) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
-<a href=#626 id=626 data-nosnippet>626</a> <span class="kw">let </span>fields = results
-<a href=#627 id=627 data-nosnippet>627</a> .into_iter()
-<a href=#628 id=628 data-nosnippet>628</a> .map(|result| <span class="kw">match </span>result {
-<a href=#629 id=629 data-nosnippet>629</a> ArrowSchemaOrFieldOrType::Field(field) => field,
-<a href=#630 id=630 data-nosnippet>630</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
-<a href=#631 id=631 data-nosnippet>631</a> })
-<a href=#632 id=632 data-nosnippet>632</a> .collect();
-<a href=#633 id=633 data-nosnippet>633</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Struct(fields)))
-<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="kw">fn </span>list(<span class="kw-2">&mut </span><span class="self">self</span>, list: <span class="kw-2">&</span>ListType, value: ArrowSchemaOrFieldOrType) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#637 id=637 data-nosnippet>637</a> <span class="comment">// `field` already carries the element's field id, doc, and — for a variant element —
-<a href=#638 id=638 data-nosnippet>638</a> // the arrow.parquet.variant extension type. Don't overwrite its metadata here (doing so
-<a href=#639 id=639 data-nosnippet>639</a> // would drop the extension type for `list<variant>`).
-<a href=#640 id=640 data-nosnippet>640</a> </span><span class="kw">let </span>field = <span class="kw">match </span><span class="self">self</span>.field(<span class="kw-2">&</span>list.element_field, value)<span class="question-mark">? </span>{
-<a href=#641 id=641 data-nosnippet>641</a> ArrowSchemaOrFieldOrType::Field(field) => field,
-<a href=#642 id=642 data-nosnippet>642</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
+<a href=#545 id=545 data-nosnippet>545</a> DataType::Timestamp(unit, <span class="prelude-val">Some</span>(zone))
+<a href=#546 id=546 data-nosnippet>546</a> <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Microsecond
+<a href=#547 id=547 data-nosnippet>547</a> && (zone.as_ref() == <span class="string">"UTC" </span>|| zone.as_ref() == <span class="string">"+00:00"</span>) =>
+<a href=#548 id=548 data-nosnippet>548</a> {
+<a href=#549 id=549 data-nosnippet>549</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Timestamptz))
+<a href=#550 id=550 data-nosnippet>550</a> }
+<a href=#551 id=551 data-nosnippet>551</a> DataType::Timestamp(unit, <span class="prelude-val">Some</span>(zone))
+<a href=#552 id=552 data-nosnippet>552</a> <span class="kw">if </span>unit == <span class="kw-2">&</span>TimeUnit::Nanosecond
+<a href=#553 id=553 data-nosnippet>553</a> && (zone.as_ref() == <span class="string">"UTC" </span>|| zone.as_ref() == <span class="string">"+00:00"</span>) =>
+<a href=#554 id=554 data-nosnippet>554</a> {
+<a href=#555 id=555 data-nosnippet>555</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::TimestamptzNs))
+<a href=#556 id=556 data-nosnippet>556</a> }
+<a href=#557 id=557 data-nosnippet>557</a> DataType::Binary | DataType::LargeBinary | DataType::BinaryView => {
+<a href=#558 id=558 data-nosnippet>558</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Binary))
+<a href=#559 id=559 data-nosnippet>559</a> }
+<a href=#560 id=560 data-nosnippet>560</a> DataType::FixedSizeBinary(width) => {
+<a href=#561 id=561 data-nosnippet>561</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Fixed(<span class="kw-2">*</span>width <span class="kw">as </span>u64)))
+<a href=#562 id=562 data-nosnippet>562</a> }
+<a href=#563 id=563 data-nosnippet>563</a> DataType::Utf8View | DataType::Utf8 | DataType::LargeUtf8 => {
+<a href=#564 id=564 data-nosnippet>564</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::String))
+<a href=#565 id=565 data-nosnippet>565</a> }
+<a href=#566 id=566 data-nosnippet>566</a> <span class="kw">_ </span>=> <span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(<span class="string">"Unsupported Arrow data type: {p}"</span>)),
+<a href=#567 id=567 data-nosnippet>567</a> }
+<a href=#568 id=568 data-nosnippet>568</a> }
+<a href=#569 id=569 data-nosnippet>569</a>
+<a href=#570 id=570 data-nosnippet>570</a> <span class="kw">fn </span>variant(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#571 id=571 data-nosnippet>571</a> <span class="comment">// The extension may only sit on struct storage (mirrors
+<a href=#572 id=572 data-nosnippet>572</a> // `VariantExtensionType::supports_data_type`).
+<a href=#573 id=573 data-nosnippet>573</a> </span><span class="kw">if </span>!<span class="macro">matches!</span>(field.data_type(), DataType::Struct(<span class="kw">_</span>)) {
+<a href=#574 id=574 data-nosnippet>574</a> <span class="kw">return </span><span class="prelude-val">Err</span>(<span class="macro">invalid_data!</span>(
+<a href=#575 id=575 data-nosnippet>575</a> <span class="string">"arrow.parquet.variant extension requires Struct storage"
+<a href=#576 id=576 data-nosnippet>576</a> </span>));
+<a href=#577 id=577 data-nosnippet>577</a> }
+<a href=#578 id=578 data-nosnippet>578</a> <span class="comment">// Fold the whole struct into a single logical variant without descending:
+<a href=#579 id=579 data-nosnippet>579</a> // the storage sub-fields carry no Iceberg field id, so visiting them would
+<a href=#580 id=580 data-nosnippet>580</a> // fail. The enclosing field's own id is read by the caller.
+<a href=#581 id=581 data-nosnippet>581</a> </span><span class="prelude-val">Ok</span>(Type::Variant(VariantType))
+<a href=#582 id=582 data-nosnippet>582</a> }
+<a href=#583 id=583 data-nosnippet>583</a>
+<a href=#584 id=584 data-nosnippet>584</a> <span class="kw">fn </span>uuid(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#585 id=585 data-nosnippet>585</a> <span class="comment">// The extension expects a fixed size binary.
+<a href=#586 id=586 data-nosnippet>586</a> // See: Apache Arrow spec https://arrow.apache.org/docs/format/CanonicalExtensions.html#uuid
+<a href=#587 id=587 data-nosnippet>587</a> </span><span class="kw">let </span>field_data_type = field.data_type();
+<a href=#588 id=588 data-nosnippet>588</a> <span class="kw">let </span>expected_data_type = DataType::FixedSizeBinary(<span class="number">16</span>);
+<a href=#589 id=589 data-nosnippet>589</a> <span class="kw">if </span><span class="kw-2">*</span>field_data_type != expected_data_type {
+<a href=#590 id=590 data-nosnippet>590</a> <span class="kw">let </span>error_message = <span class="macro">format!</span>(
+<a href=#591 id=591 data-nosnippet>591</a> <span class="string">"{} extension requires {expected_data_type} storage, found {field_data_type}"</span>,
+<a href=#592 id=592 data-nosnippet>592</a> UuidExtensionType::NAME,
+<a href=#593 id=593 data-nosnippet>593</a> );
+<a href=#594 id=594 data-nosnippet>594</a>
+<a href=#595 id=595 data-nosnippet>595</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(ErrorKind::DataInvalid, error_message));
+<a href=#596 id=596 data-nosnippet>596</a> }
+<a href=#597 id=597 data-nosnippet>597</a>
+<a href=#598 id=598 data-nosnippet>598</a> <span class="prelude-val">Ok</span>(Type::Primitive(PrimitiveType::Uuid))
+<a href=#599 id=599 data-nosnippet>599</a> }
+<a href=#600 id=600 data-nosnippet>600</a>}
+<a href=#601 id=601 data-nosnippet>601</a>
+<a href=#602 id=602 data-nosnippet>602</a><span class="kw">struct </span>ToArrowSchemaConverter;
+<a href=#603 id=603 data-nosnippet>603</a>
+<a href=#604 id=604 data-nosnippet>604</a><span class="kw">enum </span>ArrowSchemaOrFieldOrType {
+<a href=#605 id=605 data-nosnippet>605</a> Schema(ArrowSchema),
+<a href=#606 id=606 data-nosnippet>606</a> Field(Field),
+<a href=#607 id=607 data-nosnippet>607</a> Type(DataType),
+<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="kw">impl </span>SchemaVisitor <span class="kw">for </span>ToArrowSchemaConverter {
+<a href=#611 id=611 data-nosnippet>611</a> <span class="kw">type </span>T = ArrowSchemaOrFieldOrType;
+<a href=#612 id=612 data-nosnippet>612</a>
+<a href=#613 id=613 data-nosnippet>613</a> <span class="kw">fn </span>schema(
+<a href=#614 id=614 data-nosnippet>614</a> <span class="kw-2">&mut </span><span class="self">self</span>,
+<a href=#615 id=615 data-nosnippet>615</a> _schema: <span class="kw-2">&</span>Schema,
+<a href=#616 id=616 data-nosnippet>616</a> value: ArrowSchemaOrFieldOrType,
+<a href=#617 id=617 data-nosnippet>617</a> ) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
+<a href=#618 id=618 data-nosnippet>618</a> <span class="kw">let </span>struct_type = <span class="kw">match </span>value {
+<a href=#619 id=619 data-nosnippet>619</a> ArrowSchemaOrFieldOrType::Type(DataType::Struct(fields)) => fields,
+<a href=#620 id=620 data-nosnippet>620</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
+<a href=#621 id=621 data-nosnippet>621</a> };
+<a href=#622 id=622 data-nosnippet>622</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Schema(ArrowSchema::new(
+<a href=#623 id=623 data-nosnippet>623</a> struct_type,
+<a href=#624 id=624 data-nosnippet>624</a> )))
+<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="kw">fn </span>field(
+<a href=#628 id=628 data-nosnippet>628</a> <span class="kw-2">&mut </span><span class="self">self</span>,
+<a href=#629 id=629 data-nosnippet>629</a> field: <span class="kw-2">&</span>NestedFieldRef,
+<a href=#630 id=630 data-nosnippet>630</a> value: ArrowSchemaOrFieldOrType,
+<a href=#631 id=631 data-nosnippet>631</a> ) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
+<a href=#632 id=632 data-nosnippet>632</a> <span class="kw">let </span>ty = <span class="kw">match </span>value {
+<a href=#633 id=633 data-nosnippet>633</a> ArrowSchemaOrFieldOrType::Type(ty) => ty,
+<a href=#634 id=634 data-nosnippet>634</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
+<a href=#635 id=635 data-nosnippet>635</a> };
+<a href=#636 id=636 data-nosnippet>636</a> <span class="kw">let </span>metadata = <span class="kw">if let </span><span class="prelude-val">Some</span>(doc) = <span class="kw-2">&</span>field.doc {
+<a href=#637 id=637 data-nosnippet>637</a> HashMap::from([
+<a href=#638 id=638 data-nosnippet>638</a> (PARQUET_FIELD_ID_META_KEY.to_string(), field.id.to_string()),
+<a href=#639 id=639 data-nosnippet>639</a> (ARROW_FIELD_DOC_KEY.to_string(), doc.clone()),
+<a href=#640 id=640 data-nosnippet>640</a> ])
+<a href=#641 id=641 data-nosnippet>641</a> } <span class="kw">else </span>{
+<a href=#642 id=642 data-nosnippet>642</a> HashMap::from([(PARQUET_FIELD_ID_META_KEY.to_string(), field.id.to_string())])
<a href=#643 id=643 data-nosnippet>643</a> };
-<a href=#644 id=644 data-nosnippet>644</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::List(Arc::new(
-<a href=#645 id=645 data-nosnippet>645</a> field,
-<a href=#646 id=646 data-nosnippet>646</a> ))))
-<a href=#647 id=647 data-nosnippet>647</a> }
-<a href=#648 id=648 data-nosnippet>648</a>
-<a href=#649 id=649 data-nosnippet>649</a> <span class="kw">fn </span>map(
-<a href=#650 id=650 data-nosnippet>650</a> <span class="kw-2">&mut </span><span class="self">self</span>,
-<a href=#651 id=651 data-nosnippet>651</a> map: <span class="kw-2">&</span>MapType,
-<a href=#652 id=652 data-nosnippet>652</a> key_value: ArrowSchemaOrFieldOrType,
-<a href=#653 id=653 data-nosnippet>653</a> value: ArrowSchemaOrFieldOrType,
-<a href=#654 id=654 data-nosnippet>654</a> ) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
-<a href=#655 id=655 data-nosnippet>655</a> <span class="kw">let </span>key_field = <span class="kw">match </span><span class="self">self</span>.field(<span class="kw-2">&</span>map.key_field, key_value)<span class="question-mark">? </span>{
-<a href=#656 id=656 data-nosnippet>656</a> ArrowSchemaOrFieldOrType::Field(field) => field,
-<a href=#657 id=657 data-nosnippet>657</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
-<a href=#658 id=658 data-nosnippet>658</a> };
-<a href=#659 id=659 data-nosnippet>659</a> <span class="kw">let </span>value_field = <span class="kw">match </span><span class="self">self</span>.field(<span class="kw-2">&</span>map.value_field, value)<span class="question-mark">? </span>{
-<a href=#660 id=660 data-nosnippet>660</a> ArrowSchemaOrFieldOrType::Field(field) => field,
-<a href=#661 id=661 data-nosnippet>661</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
-<a href=#662 id=662 data-nosnippet>662</a> };
-<a href=#663 id=663 data-nosnippet>663</a> <span class="kw">let </span>field = Field::new(
-<a href=#664 id=664 data-nosnippet>664</a> DEFAULT_MAP_FIELD_NAME,
-<a href=#665 id=665 data-nosnippet>665</a> DataType::Struct(<span class="macro">vec!</span>[key_field, value_field].into()),
-<a href=#666 id=666 data-nosnippet>666</a> <span class="comment">// Map field is always not nullable
-<a href=#667 id=667 data-nosnippet>667</a> </span><span class="bool-val">false</span>,
-<a href=#668 id=668 data-nosnippet>668</a> );
-<a href=#669 id=669 data-nosnippet>669</a>
-<a href=#670 id=670 data-nosnippet>670</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Map(
-<a href=#671 id=671 data-nosnippet>671</a> field.into(),
-<a href=#672 id=672 data-nosnippet>672</a> <span class="bool-val">false</span>,
-<a href=#673 id=673 data-nosnippet>673</a> )))
-<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> <span class="kw">fn </span>primitive(<span class="kw-2">&mut </span><span class="self">self</span>, p: <span class="kw-2">&</span>PrimitiveType) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
-<a href=#677 id=677 data-nosnippet>677</a> <span class="kw">match </span>p {
-<a href=#678 id=678 data-nosnippet>678</a> PrimitiveType::Unknown => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Null)),
-<a href=#679 id=679 data-nosnippet>679</a> PrimitiveType::Boolean => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Boolean)),
-<a href=#680 id=680 data-nosnippet>680</a> PrimitiveType::Int => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Int32)),
-<a href=#681 id=681 data-nosnippet>681</a> PrimitiveType::Long => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Int64)),
-<a href=#682 id=682 data-nosnippet>682</a> PrimitiveType::Float => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Float32)),
-<a href=#683 id=683 data-nosnippet>683</a> PrimitiveType::Double => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Float64)),
-<a href=#684 id=684 data-nosnippet>684</a> PrimitiveType::Decimal { precision, scale } => {
-<a href=#685 id=685 data-nosnippet>685</a> <span class="kw">let </span>(precision, scale) = {
-<a href=#686 id=686 data-nosnippet>686</a> <span class="kw">let </span>precision: u8 = precision.to_owned().try_into().map_err(|err| {
-<a href=#687 id=687 data-nosnippet>687</a> <span class="macro">invalid_data!</span>(<span class="string">"incompatible precision for decimal type convert"</span>)
-<a href=#688 id=688 data-nosnippet>688</a> .with_source(err)
-<a href=#689 id=689 data-nosnippet>689</a> })<span class="question-mark">?</span>;
-<a href=#690 id=690 data-nosnippet>690</a> <span class="kw">let </span>scale = scale.to_owned().try_into().map_err(|err| {
-<a href=#691 id=691 data-nosnippet>691</a> <span class="macro">invalid_data!</span>(<span class="string">"incompatible scale for decimal type convert"</span>)
-<a href=#692 id=692 data-nosnippet>692</a> .with_source(err)
-<a href=#693 id=693 data-nosnippet>693</a> })<span class="question-mark">?</span>;
-<a href=#694 id=694 data-nosnippet>694</a> (precision, scale)
-<a href=#695 id=695 data-nosnippet>695</a> };
-<a href=#696 id=696 data-nosnippet>696</a> validate_decimal_precision_and_scale::<Decimal128Type>(precision, scale).map_err(
-<a href=#697 id=697 data-nosnippet>697</a> |err| {
-<a href=#698 id=698 data-nosnippet>698</a> <span class="macro">invalid_data!</span>(<span class="string">"incompatible precision and scale for decimal type convert"</span>)
-<a href=#699 id=699 data-nosnippet>699</a> .with_source(err)
-<a href=#700 id=700 data-nosnippet>700</a> },
-<a href=#701 id=701 data-nosnippet>701</a> )<span class="question-mark">?</span>;
-<a href=#702 id=702 data-nosnippet>702</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Decimal128(
-<a href=#703 id=703 data-nosnippet>703</a> precision, scale,
-<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> PrimitiveType::Date => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Date32)),
-<a href=#707 id=707 data-nosnippet>707</a> PrimitiveType::Time => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Time64(
-<a href=#708 id=708 data-nosnippet>708</a> TimeUnit::Microsecond,
-<a href=#709 id=709 data-nosnippet>709</a> ))),
-<a href=#710 id=710 data-nosnippet>710</a> PrimitiveType::Timestamp => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Timestamp(
-<a href=#711 id=711 data-nosnippet>711</a> TimeUnit::Microsecond,
-<a href=#712 id=712 data-nosnippet>712</a> <span class="prelude-val">None</span>,
-<a href=#713 id=713 data-nosnippet>713</a> ))),
-<a href=#714 id=714 data-nosnippet>714</a> PrimitiveType::Timestamptz => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(
-<a href=#715 id=715 data-nosnippet>715</a> <span class="comment">// Timestampz always stored as UTC
-<a href=#716 id=716 data-nosnippet>716</a> </span>DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(UTC_TIME_ZONE.into())),
-<a href=#717 id=717 data-nosnippet>717</a> )),
-<a href=#718 id=718 data-nosnippet>718</a> PrimitiveType::TimestampNs => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Timestamp(
-<a href=#719 id=719 data-nosnippet>719</a> TimeUnit::Nanosecond,
-<a href=#720 id=720 data-nosnippet>720</a> <span class="prelude-val">None</span>,
-<a href=#721 id=721 data-nosnippet>721</a> ))),
-<a href=#722 id=722 data-nosnippet>722</a> PrimitiveType::TimestamptzNs => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(
-<a href=#723 id=723 data-nosnippet>723</a> <span class="comment">// Store timestamptz_ns as UTC
-<a href=#724 id=724 data-nosnippet>724</a> </span>DataType::Timestamp(TimeUnit::Nanosecond, <span class="prelude-val">Some</span>(UTC_TIME_ZONE.into())),
-<a href=#725 id=725 data-nosnippet>725</a> )),
-<a href=#726 id=726 data-nosnippet>726</a> PrimitiveType::String => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Utf8)),
-<a href=#727 id=727 data-nosnippet>727</a> PrimitiveType::Uuid => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::FixedSizeBinary(
-<a href=#728 id=728 data-nosnippet>728</a> <span class="number">16</span>,
-<a href=#729 id=729 data-nosnippet>729</a> ))),
-<a href=#730 id=730 data-nosnippet>730</a> PrimitiveType::Fixed(len) => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(
-<a href=#731 id=731 data-nosnippet>731</a> i32::try_from(<span class="kw-2">*</span>len)
-<a href=#732 id=732 data-nosnippet>732</a> .ok()
-<a href=#733 id=733 data-nosnippet>733</a> .map(DataType::FixedSizeBinary)
-<a href=#734 id=734 data-nosnippet>734</a> .unwrap_or(DataType::LargeBinary),
-<a href=#735 id=735 data-nosnippet>735</a> )),
-<a href=#736 id=736 data-nosnippet>736</a> PrimitiveType::Binary => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::LargeBinary)),
-<a href=#737 id=737 data-nosnippet>737</a> }
-<a href=#738 id=738 data-nosnippet>738</a> }
-<a href=#739 id=739 data-nosnippet>739</a>
-<a href=#740 id=740 data-nosnippet>740</a> <span class="kw">fn </span>variant(<span class="kw-2">&mut </span><span class="self">self</span>, _v: <span class="kw-2">&</span>VariantType) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
-<a href=#741 id=741 data-nosnippet>741</a> <span class="comment">// Variant is stored as a struct of two binary sub-fields (no field IDs on sub-fields).
-<a href=#742 id=742 data-nosnippet>742</a> // Uses Binary (not LargeBinary) matching the Parquet BINARY primitive directly.
-<a href=#743 id=743 data-nosnippet>743</a> // `metadata` is always present; `value` is nullable, since in a shredded variant the
-<a href=#744 id=744 data-nosnippet>744</a> // value may be absent. The enclosing field carries the `arrow.parquet.variant` extension type
-<a href=#745 id=745 data-nosnippet>745</a> // (attached in `field`).
-<a href=#746 id=746 data-nosnippet>746</a> </span><span class="kw">let </span>metadata_field = Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>);
-<a href=#747 id=747 data-nosnippet>747</a> <span class="kw">let </span>value_field = Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>);
-<a href=#748 id=748 data-nosnippet>748</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Struct(
-<a href=#749 id=749 data-nosnippet>749</a> <span class="macro">vec!</span>[metadata_field, value_field].into(),
-<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>}
-<a href=#753 id=753 data-nosnippet>753</a>
-<a href=#754 id=754 data-nosnippet>754</a><span class="doccomment">/// Convert iceberg schema to an arrow schema.
-<a href=#755 id=755 data-nosnippet>755</a></span><span class="kw">pub fn </span>schema_to_arrow_schema(schema: <span class="kw-2">&</span>Schema) -> <span class="prelude-ty">Result</span><ArrowSchema> {
-<a href=#756 id=756 data-nosnippet>756</a> <span class="kw">let </span><span class="kw-2">mut </span>converter = ToArrowSchemaConverter;
-<a href=#757 id=757 data-nosnippet>757</a> <span class="kw">match </span><span class="kw">crate</span>::spec::visit_schema(schema, <span class="kw-2">&mut </span>converter)<span class="question-mark">? </span>{
-<a href=#758 id=758 data-nosnippet>758</a> ArrowSchemaOrFieldOrType::Schema(schema) => <span class="prelude-val">Ok</span>(schema),
-<a href=#759 id=759 data-nosnippet>759</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
-<a href=#760 id=760 data-nosnippet>760</a> }
-<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><span class="doccomment">/// Convert iceberg type to an arrow type.
-<a href=#764 id=764 data-nosnippet>764</a></span><span class="kw">pub fn </span>type_to_arrow_type(ty: <span class="kw-2">&</span>Type) -> <span class="prelude-ty">Result</span><DataType> {
-<a href=#765 id=765 data-nosnippet>765</a> <span class="kw">let </span><span class="kw-2">mut </span>converter = ToArrowSchemaConverter;
-<a href=#766 id=766 data-nosnippet>766</a> <span class="kw">match </span><span class="kw">crate</span>::spec::visit_type(ty, <span class="kw-2">&mut </span>converter)<span class="question-mark">? </span>{
-<a href=#767 id=767 data-nosnippet>767</a> ArrowSchemaOrFieldOrType::Type(ty) => <span class="prelude-val">Ok</span>(ty),
-<a href=#768 id=768 data-nosnippet>768</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
-<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=#772 id=772 data-nosnippet>772</a><span class="doccomment">/// Convert Iceberg Datum to Arrow Datum.
-<a href=#773 id=773 data-nosnippet>773</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>get_arrow_datum(datum: <span class="kw-2">&</span>Datum) -> <span class="prelude-ty">Result</span><Arc<<span class="kw">dyn </span>ArrowDatum + Send + Sync>> {
-<a href=#774 id=774 data-nosnippet>774</a> <span class="kw">match </span>(datum.data_type(), datum.literal()) {
-<a href=#775 id=775 data-nosnippet>775</a> (PrimitiveType::Boolean, PrimitiveLiteral::Boolean(value)) => {
-<a href=#776 id=776 data-nosnippet>776</a> <span class="prelude-val">Ok</span>(Arc::new(BooleanArray::new_scalar(<span class="kw-2">*</span>value)))
-<a href=#777 id=777 data-nosnippet>777</a> }
-<a href=#778 id=778 data-nosnippet>778</a> (PrimitiveType::Int, PrimitiveLiteral::Int(value)) => {
-<a href=#779 id=779 data-nosnippet>779</a> <span class="prelude-val">Ok</span>(Arc::new(Int32Array::new_scalar(<span class="kw-2">*</span>value)))
+<a href=#644 id=644 data-nosnippet>644</a> <span class="kw">let </span>arrow_field =
+<a href=#645 id=645 data-nosnippet>645</a> Field::new(field.name.clone(), ty, !field.required).with_metadata(metadata);
+<a href=#646 id=646 data-nosnippet>646</a> <span class="comment">// A variant column's storage is a struct; tag the field with the canonical
+<a href=#647 id=647 data-nosnippet>647</a> // `arrow.parquet.variant` extension type so consumers read it as a Variant, not a struct.
+<a href=#648 id=648 data-nosnippet>648</a> </span><span class="kw">let </span>arrow_field = <span class="kw">if </span>field.field_type.is_variant() {
+<a href=#649 id=649 data-nosnippet>649</a> arrow_field.with_extension_type(VariantExtensionType)
+<a href=#650 id=650 data-nosnippet>650</a> } <span class="kw">else if </span><span class="macro">matches!</span>(
+<a href=#651 id=651 data-nosnippet>651</a> field.field_type.as_ref(),
+<a href=#652 id=652 data-nosnippet>652</a> Type::Primitive(PrimitiveType::Uuid)
+<a href=#653 id=653 data-nosnippet>653</a> ) {
+<a href=#654 id=654 data-nosnippet>654</a> <span class="comment">// A uuid column's storage is FixedSizeBinary(16); tag the field with the canonical
+<a href=#655 id=655 data-nosnippet>655</a> // `arrow.uuid` extension type so consumers read it as a UUID, not opaque bytes.
+<a href=#656 id=656 data-nosnippet>656</a> </span>arrow_field.with_extension_type(UuidExtensionType)
+<a href=#657 id=657 data-nosnippet>657</a> } <span class="kw">else </span>{
+<a href=#658 id=658 data-nosnippet>658</a> arrow_field
+<a href=#659 id=659 data-nosnippet>659</a> };
+<a href=#660 id=660 data-nosnippet>660</a>
+<a href=#661 id=661 data-nosnippet>661</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Field(arrow_field))
+<a href=#662 id=662 data-nosnippet>662</a> }
+<a href=#663 id=663 data-nosnippet>663</a>
+<a href=#664 id=664 data-nosnippet>664</a> <span class="kw">fn </span>r#struct(
+<a href=#665 id=665 data-nosnippet>665</a> <span class="kw-2">&mut </span><span class="self">self</span>,
+<a href=#666 id=666 data-nosnippet>666</a> <span class="kw">_</span>: <span class="kw-2">&</span>StructType,
+<a href=#667 id=667 data-nosnippet>667</a> results: Vec<ArrowSchemaOrFieldOrType>,
+<a href=#668 id=668 data-nosnippet>668</a> ) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
+<a href=#669 id=669 data-nosnippet>669</a> <span class="kw">let </span>fields = results
+<a href=#670 id=670 data-nosnippet>670</a> .into_iter()
+<a href=#671 id=671 data-nosnippet>671</a> .map(|result| <span class="kw">match </span>result {
+<a href=#672 id=672 data-nosnippet>672</a> ArrowSchemaOrFieldOrType::Field(field) => field,
+<a href=#673 id=673 data-nosnippet>673</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
+<a href=#674 id=674 data-nosnippet>674</a> })
+<a href=#675 id=675 data-nosnippet>675</a> .collect();
+<a href=#676 id=676 data-nosnippet>676</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Struct(fields)))
+<a href=#677 id=677 data-nosnippet>677</a> }
+<a href=#678 id=678 data-nosnippet>678</a>
+<a href=#679 id=679 data-nosnippet>679</a> <span class="kw">fn </span>list(<span class="kw-2">&mut </span><span class="self">self</span>, list: <span class="kw-2">&</span>ListType, value: ArrowSchemaOrFieldOrType) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#680 id=680 data-nosnippet>680</a> <span class="comment">// `field` already carries the element's field id, doc, and — for a variant element —
+<a href=#681 id=681 data-nosnippet>681</a> // the arrow.parquet.variant extension type. Don't overwrite its metadata here (doing so
+<a href=#682 id=682 data-nosnippet>682</a> // would drop the extension type for `list<variant>`).
+<a href=#683 id=683 data-nosnippet>683</a> </span><span class="kw">let </span>field = <span class="kw">match </span><span class="self">self</span>.field(<span class="kw-2">&</span>list.element_field, value)<span class="question-mark">? </span>{
+<a href=#684 id=684 data-nosnippet>684</a> ArrowSchemaOrFieldOrType::Field(field) => field,
+<a href=#685 id=685 data-nosnippet>685</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
+<a href=#686 id=686 data-nosnippet>686</a> };
+<a href=#687 id=687 data-nosnippet>687</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::List(Arc::new(
+<a href=#688 id=688 data-nosnippet>688</a> field,
+<a href=#689 id=689 data-nosnippet>689</a> ))))
+<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="kw">fn </span>map(
+<a href=#693 id=693 data-nosnippet>693</a> <span class="kw-2">&mut </span><span class="self">self</span>,
+<a href=#694 id=694 data-nosnippet>694</a> map: <span class="kw-2">&</span>MapType,
+<a href=#695 id=695 data-nosnippet>695</a> key_value: ArrowSchemaOrFieldOrType,
+<a href=#696 id=696 data-nosnippet>696</a> value: ArrowSchemaOrFieldOrType,
+<a href=#697 id=697 data-nosnippet>697</a> ) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
+<a href=#698 id=698 data-nosnippet>698</a> <span class="kw">let </span>key_field = <span class="kw">match </span><span class="self">self</span>.field(<span class="kw-2">&</span>map.key_field, key_value)<span class="question-mark">? </span>{
+<a href=#699 id=699 data-nosnippet>699</a> ArrowSchemaOrFieldOrType::Field(field) => field,
+<a href=#700 id=700 data-nosnippet>700</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
+<a href=#701 id=701 data-nosnippet>701</a> };
+<a href=#702 id=702 data-nosnippet>702</a> <span class="kw">let </span>value_field = <span class="kw">match </span><span class="self">self</span>.field(<span class="kw-2">&</span>map.value_field, value)<span class="question-mark">? </span>{
+<a href=#703 id=703 data-nosnippet>703</a> ArrowSchemaOrFieldOrType::Field(field) => field,
+<a href=#704 id=704 data-nosnippet>704</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
+<a href=#705 id=705 data-nosnippet>705</a> };
+<a href=#706 id=706 data-nosnippet>706</a> <span class="kw">let </span>field = Field::new(
+<a href=#707 id=707 data-nosnippet>707</a> DEFAULT_MAP_FIELD_NAME,
+<a href=#708 id=708 data-nosnippet>708</a> DataType::Struct(<span class="macro">vec!</span>[key_field, value_field].into()),
+<a href=#709 id=709 data-nosnippet>709</a> <span class="comment">// Map field is always not nullable
+<a href=#710 id=710 data-nosnippet>710</a> </span><span class="bool-val">false</span>,
+<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="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Map(
+<a href=#714 id=714 data-nosnippet>714</a> field.into(),
+<a href=#715 id=715 data-nosnippet>715</a> <span class="bool-val">false</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>
+<a href=#719 id=719 data-nosnippet>719</a> <span class="kw">fn </span>primitive(<span class="kw-2">&mut </span><span class="self">self</span>, p: <span class="kw-2">&</span>PrimitiveType) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
+<a href=#720 id=720 data-nosnippet>720</a> <span class="kw">match </span>p {
+<a href=#721 id=721 data-nosnippet>721</a> PrimitiveType::Unknown => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Null)),
+<a href=#722 id=722 data-nosnippet>722</a> PrimitiveType::Boolean => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Boolean)),
+<a href=#723 id=723 data-nosnippet>723</a> PrimitiveType::Int => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Int32)),
+<a href=#724 id=724 data-nosnippet>724</a> PrimitiveType::Long => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Int64)),
+<a href=#725 id=725 data-nosnippet>725</a> PrimitiveType::Float => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Float32)),
+<a href=#726 id=726 data-nosnippet>726</a> PrimitiveType::Double => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Float64)),
+<a href=#727 id=727 data-nosnippet>727</a> PrimitiveType::Decimal { precision, scale } => {
+<a href=#728 id=728 data-nosnippet>728</a> <span class="kw">let </span>(precision, scale) = {
+<a href=#729 id=729 data-nosnippet>729</a> <span class="kw">let </span>precision: u8 = precision.to_owned().try_into().map_err(|err| {
+<a href=#730 id=730 data-nosnippet>730</a> <span class="macro">invalid_data!</span>(<span class="string">"incompatible precision for decimal type convert"</span>)
+<a href=#731 id=731 data-nosnippet>731</a> .with_source(err)
+<a href=#732 id=732 data-nosnippet>732</a> })<span class="question-mark">?</span>;
+<a href=#733 id=733 data-nosnippet>733</a> <span class="kw">let </span>scale = scale.to_owned().try_into().map_err(|err| {
+<a href=#734 id=734 data-nosnippet>734</a> <span class="macro">invalid_data!</span>(<span class="string">"incompatible scale for decimal type convert"</span>)
+<a href=#735 id=735 data-nosnippet>735</a> .with_source(err)
+<a href=#736 id=736 data-nosnippet>736</a> })<span class="question-mark">?</span>;
+<a href=#737 id=737 data-nosnippet>737</a> (precision, scale)
+<a href=#738 id=738 data-nosnippet>738</a> };
+<a href=#739 id=739 data-nosnippet>739</a> validate_decimal_precision_and_scale::<Decimal128Type>(precision, scale).map_err(
+<a href=#740 id=740 data-nosnippet>740</a> |err| {
+<a href=#741 id=741 data-nosnippet>741</a> <span class="macro">invalid_data!</span>(<span class="string">"incompatible precision and scale for decimal type convert"</span>)
+<a href=#742 id=742 data-nosnippet>742</a> .with_source(err)
+<a href=#743 id=743 data-nosnippet>743</a> },
+<a href=#744 id=744 data-nosnippet>744</a> )<span class="question-mark">?</span>;
+<a href=#745 id=745 data-nosnippet>745</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Decimal128(
+<a href=#746 id=746 data-nosnippet>746</a> precision, scale,
+<a href=#747 id=747 data-nosnippet>747</a> )))
+<a href=#748 id=748 data-nosnippet>748</a> }
+<a href=#749 id=749 data-nosnippet>749</a> PrimitiveType::Date => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Date32)),
+<a href=#750 id=750 data-nosnippet>750</a> PrimitiveType::Time => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Time64(
+<a href=#751 id=751 data-nosnippet>751</a> TimeUnit::Microsecond,
+<a href=#752 id=752 data-nosnippet>752</a> ))),
+<a href=#753 id=753 data-nosnippet>753</a> PrimitiveType::Timestamp => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Timestamp(
+<a href=#754 id=754 data-nosnippet>754</a> TimeUnit::Microsecond,
+<a href=#755 id=755 data-nosnippet>755</a> <span class="prelude-val">None</span>,
+<a href=#756 id=756 data-nosnippet>756</a> ))),
+<a href=#757 id=757 data-nosnippet>757</a> PrimitiveType::Timestamptz => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(
+<a href=#758 id=758 data-nosnippet>758</a> <span class="comment">// Timestampz always stored as UTC
+<a href=#759 id=759 data-nosnippet>759</a> </span>DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(UTC_TIME_ZONE.into())),
+<a href=#760 id=760 data-nosnippet>760</a> )),
+<a href=#761 id=761 data-nosnippet>761</a> PrimitiveType::TimestampNs => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Timestamp(
+<a href=#762 id=762 data-nosnippet>762</a> TimeUnit::Nanosecond,
+<a href=#763 id=763 data-nosnippet>763</a> <span class="prelude-val">None</span>,
+<a href=#764 id=764 data-nosnippet>764</a> ))),
+<a href=#765 id=765 data-nosnippet>765</a> PrimitiveType::TimestamptzNs => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(
+<a href=#766 id=766 data-nosnippet>766</a> <span class="comment">// Store timestamptz_ns as UTC
+<a href=#767 id=767 data-nosnippet>767</a> </span>DataType::Timestamp(TimeUnit::Nanosecond, <span class="prelude-val">Some</span>(UTC_TIME_ZONE.into())),
+<a href=#768 id=768 data-nosnippet>768</a> )),
+<a href=#769 id=769 data-nosnippet>769</a> PrimitiveType::String => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Utf8)),
+<a href=#770 id=770 data-nosnippet>770</a> PrimitiveType::Uuid => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::FixedSizeBinary(
+<a href=#771 id=771 data-nosnippet>771</a> <span class="number">16</span>,
+<a href=#772 id=772 data-nosnippet>772</a> ))),
+<a href=#773 id=773 data-nosnippet>773</a> PrimitiveType::Fixed(len) => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(
+<a href=#774 id=774 data-nosnippet>774</a> i32::try_from(<span class="kw-2">*</span>len)
+<a href=#775 id=775 data-nosnippet>775</a> .ok()
+<a href=#776 id=776 data-nosnippet>776</a> .map(DataType::FixedSizeBinary)
+<a href=#777 id=777 data-nosnippet>777</a> .unwrap_or(DataType::LargeBinary),
+<a href=#778 id=778 data-nosnippet>778</a> )),
+<a href=#779 id=779 data-nosnippet>779</a> PrimitiveType::Binary => <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::LargeBinary)),
<a href=#780 id=780 data-nosnippet>780</a> }
-<a href=#781 id=781 data-nosnippet>781</a> (PrimitiveType::Long, PrimitiveLiteral::Long(value)) => {
-<a href=#782 id=782 data-nosnippet>782</a> <span class="prelude-val">Ok</span>(Arc::new(Int64Array::new_scalar(<span class="kw-2">*</span>value)))
-<a href=#783 id=783 data-nosnippet>783</a> }
-<a href=#784 id=784 data-nosnippet>784</a> (PrimitiveType::Float, PrimitiveLiteral::Float(value)) => {
-<a href=#785 id=785 data-nosnippet>785</a> <span class="prelude-val">Ok</span>(Arc::new(Float32Array::new_scalar(value.into_inner())))
-<a href=#786 id=786 data-nosnippet>786</a> }
-<a href=#787 id=787 data-nosnippet>787</a> (PrimitiveType::Double, PrimitiveLiteral::Double(value)) => {
-<a href=#788 id=788 data-nosnippet>788</a> <span class="prelude-val">Ok</span>(Arc::new(Float64Array::new_scalar(value.into_inner())))
-<a href=#789 id=789 data-nosnippet>789</a> }
-<a href=#790 id=790 data-nosnippet>790</a> (PrimitiveType::String, PrimitiveLiteral::String(value)) => {
-<a href=#791 id=791 data-nosnippet>791</a> <span class="prelude-val">Ok</span>(Arc::new(StringArray::new_scalar(value.as_str())))
-<a href=#792 id=792 data-nosnippet>792</a> }
-<a href=#793 id=793 data-nosnippet>793</a> (PrimitiveType::Binary, PrimitiveLiteral::Binary(value)) => {
-<a href=#794 id=794 data-nosnippet>794</a> <span class="prelude-val">Ok</span>(Arc::new(BinaryArray::new_scalar(value.as_slice())))
-<a href=#795 id=795 data-nosnippet>795</a> }
-<a href=#796 id=796 data-nosnippet>796</a> (PrimitiveType::Date, PrimitiveLiteral::Int(value)) => {
-<a href=#797 id=797 data-nosnippet>797</a> <span class="prelude-val">Ok</span>(Arc::new(Date32Array::new_scalar(<span class="kw-2">*</span>value)))
-<a href=#798 id=798 data-nosnippet>798</a> }
-<a href=#799 id=799 data-nosnippet>799</a> (PrimitiveType::Timestamp, PrimitiveLiteral::Long(value)) => {
-<a href=#800 id=800 data-nosnippet>800</a> <span class="prelude-val">Ok</span>(Arc::new(TimestampMicrosecondArray::new_scalar(<span class="kw-2">*</span>value)))
-<a href=#801 id=801 data-nosnippet>801</a> }
-<a href=#802 id=802 data-nosnippet>802</a> (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(value)) => <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(
-<a href=#803 id=803 data-nosnippet>803</a> TimestampMicrosecondArray::new(<span class="macro">vec!</span>[<span class="kw-2">*</span>value; <span class="number">1</span>].into(), <span class="prelude-val">None</span>).with_timezone_utc(),
-<a href=#804 id=804 data-nosnippet>804</a> ))),
-<a href=#805 id=805 data-nosnippet>805</a> (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(value)) => {
-<a href=#806 id=806 data-nosnippet>806</a> <span class="prelude-val">Ok</span>(Arc::new(TimestampNanosecondArray::new_scalar(<span class="kw-2">*</span>value)))
-<a href=#807 id=807 data-nosnippet>807</a> }
-<a href=#808 id=808 data-nosnippet>808</a> (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(value)) => <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(
-<a href=#809 id=809 data-nosnippet>809</a> TimestampNanosecondArray::new(<span class="macro">vec!</span>[<span class="kw-2">*</span>value; <span class="number">1</span>].into(), <span class="prelude-val">None</span>).with_timezone_utc(),
-<a href=#810 id=810 data-nosnippet>810</a> ))),
-<a href=#811 id=811 data-nosnippet>811</a> (PrimitiveType::Decimal { precision, scale }, PrimitiveLiteral::Int128(value)) => {
-<a href=#812 id=812 data-nosnippet>812</a> <span class="kw">let </span>array = Decimal128Array::from_value(<span class="kw-2">*</span>value, <span class="number">1</span>)
-<a href=#813 id=813 data-nosnippet>813</a> .with_precision_and_scale(<span class="kw-2">*</span>precision <span class="kw">as _</span>, <span class="kw-2">*</span>scale <span class="kw">as _</span>)
-<a href=#814 id=814 data-nosnippet>814</a> .unwrap();
-<a href=#815 id=815 data-nosnippet>815</a> <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(array)))
-<a href=#816 id=816 data-nosnippet>816</a> }
-<a href=#817 id=817 data-nosnippet>817</a> (PrimitiveType::Uuid, PrimitiveLiteral::UInt128(value)) => {
-<a href=#818 id=818 data-nosnippet>818</a> <span class="kw">let </span>bytes = Uuid::from_u128(<span class="kw-2">*</span>value).into_bytes();
-<a href=#819 id=819 data-nosnippet>819</a> <span class="kw">let </span>array = FixedSizeBinaryArray::try_from_iter(<span class="macro">vec!</span>[bytes].into_iter()).unwrap();
-<a href=#820 id=820 data-nosnippet>820</a> <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(array)))
-<a href=#821 id=821 data-nosnippet>821</a> }
-<a href=#822 id=822 data-nosnippet>822</a> (PrimitiveType::Fixed(<span class="kw">_</span>), PrimitiveLiteral::Binary(value)) => {
-<a href=#823 id=823 data-nosnippet>823</a> <span class="kw">let </span>array = FixedSizeBinaryArray::try_from_iter(std::iter::once(value.as_slice()))
-<a href=#824 id=824 data-nosnippet>824</a> .map_err(|e| <span class="macro">invalid_data!</span>(<span class="string">"FixedSizeBinary conversion failed"</span>).with_source(e))<span class="question-mark">?</span>;
-<a href=#825 id=825 data-nosnippet>825</a> <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(array)))
+<a href=#781 id=781 data-nosnippet>781</a> }
+<a href=#782 id=782 data-nosnippet>782</a>
+<a href=#783 id=783 data-nosnippet>783</a> <span class="kw">fn </span>variant(<span class="kw-2">&mut </span><span class="self">self</span>, _v: <span class="kw-2">&</span>VariantType) -> <span class="prelude-ty">Result</span><ArrowSchemaOrFieldOrType> {
+<a href=#784 id=784 data-nosnippet>784</a> <span class="comment">// Variant is stored as a struct of two binary sub-fields (no field IDs on sub-fields).
+<a href=#785 id=785 data-nosnippet>785</a> // Uses Binary (not LargeBinary) matching the Parquet BINARY primitive directly.
+<a href=#786 id=786 data-nosnippet>786</a> // `metadata` is always present; `value` is nullable, since in a shredded variant the
+<a href=#787 id=787 data-nosnippet>787</a> // value may be absent. The enclosing field carries the `arrow.parquet.variant` extension type
+<a href=#788 id=788 data-nosnippet>788</a> // (attached in `field`).
+<a href=#789 id=789 data-nosnippet>789</a> </span><span class="kw">let </span>metadata_field = Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>);
+<a href=#790 id=790 data-nosnippet>790</a> <span class="kw">let </span>value_field = Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>);
+<a href=#791 id=791 data-nosnippet>791</a> <span class="prelude-val">Ok</span>(ArrowSchemaOrFieldOrType::Type(DataType::Struct(
+<a href=#792 id=792 data-nosnippet>792</a> <span class="macro">vec!</span>[metadata_field, value_field].into(),
+<a href=#793 id=793 data-nosnippet>793</a> )))
+<a href=#794 id=794 data-nosnippet>794</a> }
+<a href=#795 id=795 data-nosnippet>795</a>}
+<a href=#796 id=796 data-nosnippet>796</a>
+<a href=#797 id=797 data-nosnippet>797</a><span class="doccomment">/// Convert iceberg schema to an arrow schema.
+<a href=#798 id=798 data-nosnippet>798</a></span><span class="kw">pub fn </span>schema_to_arrow_schema(schema: <span class="kw-2">&</span>Schema) -> <span class="prelude-ty">Result</span><ArrowSchema> {
+<a href=#799 id=799 data-nosnippet>799</a> <span class="kw">let </span><span class="kw-2">mut </span>converter = ToArrowSchemaConverter;
+<a href=#800 id=800 data-nosnippet>800</a> <span class="kw">match </span><span class="kw">crate</span>::spec::visit_schema(schema, <span class="kw-2">&mut </span>converter)<span class="question-mark">? </span>{
+<a href=#801 id=801 data-nosnippet>801</a> ArrowSchemaOrFieldOrType::Schema(schema) => <span class="prelude-val">Ok</span>(schema),
+<a href=#802 id=802 data-nosnippet>802</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
+<a href=#803 id=803 data-nosnippet>803</a> }
+<a href=#804 id=804 data-nosnippet>804</a>}
+<a href=#805 id=805 data-nosnippet>805</a>
+<a href=#806 id=806 data-nosnippet>806</a><span class="doccomment">/// Convert iceberg type to an arrow type.
+<a href=#807 id=807 data-nosnippet>807</a></span><span class="kw">pub fn </span>type_to_arrow_type(ty: <span class="kw-2">&</span>Type) -> <span class="prelude-ty">Result</span><DataType> {
+<a href=#808 id=808 data-nosnippet>808</a> <span class="kw">let </span><span class="kw-2">mut </span>converter = ToArrowSchemaConverter;
+<a href=#809 id=809 data-nosnippet>809</a> <span class="kw">match </span><span class="kw">crate</span>::spec::visit_type(ty, <span class="kw-2">&mut </span>converter)<span class="question-mark">? </span>{
+<a href=#810 id=810 data-nosnippet>810</a> ArrowSchemaOrFieldOrType::Type(ty) => <span class="prelude-val">Ok</span>(ty),
+<a href=#811 id=811 data-nosnippet>811</a> <span class="kw">_ </span>=> <span class="macro">unreachable!</span>(),
+<a href=#812 id=812 data-nosnippet>812</a> }
+<a href=#813 id=813 data-nosnippet>813</a>}
+<a href=#814 id=814 data-nosnippet>814</a>
+<a href=#815 id=815 data-nosnippet>815</a><span class="doccomment">/// Convert Iceberg Datum to Arrow Datum.
+<a href=#816 id=816 data-nosnippet>816</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>get_arrow_datum(datum: <span class="kw-2">&</span>Datum) -> <span class="prelude-ty">Result</span><Arc<<span class="kw">dyn </span>ArrowDatum + Send + Sync>> {
+<a href=#817 id=817 data-nosnippet>817</a> <span class="kw">match </span>(datum.data_type(), datum.literal()) {
+<a href=#818 id=818 data-nosnippet>818</a> (PrimitiveType::Boolean, PrimitiveLiteral::Boolean(value)) => {
+<a href=#819 id=819 data-nosnippet>819</a> <span class="prelude-val">Ok</span>(Arc::new(BooleanArray::new_scalar(<span class="kw-2">*</span>value)))
+<a href=#820 id=820 data-nosnippet>820</a> }
+<a href=#821 id=821 data-nosnippet>821</a> (PrimitiveType::Int, PrimitiveLiteral::Int(value)) => {
+<a href=#822 id=822 data-nosnippet>822</a> <span class="prelude-val">Ok</span>(Arc::new(Int32Array::new_scalar(<span class="kw-2">*</span>value)))
+<a href=#823 id=823 data-nosnippet>823</a> }
+<a href=#824 id=824 data-nosnippet>824</a> (PrimitiveType::Long, PrimitiveLiteral::Long(value)) => {
+<a href=#825 id=825 data-nosnippet>825</a> <span class="prelude-val">Ok</span>(Arc::new(Int64Array::new_scalar(<span class="kw-2">*</span>value)))
<a href=#826 id=826 data-nosnippet>826</a> }
-<a href=#827 id=827 data-nosnippet>827</a>
-<a href=#828 id=828 data-nosnippet>828</a> (primitive_type, <span class="kw">_</span>) => <span class="prelude-val">Err</span>(Error::new(
-<a href=#829 id=829 data-nosnippet>829</a> ErrorKind::FeatureUnsupported,
-<a href=#830 id=830 data-nosnippet>830</a> <span class="macro">format!</span>(<span class="string">"Converting datum from type {primitive_type:?} to arrow not supported yet."</span>),
-<a href=#831 id=831 data-nosnippet>831</a> )),
-<a href=#832 id=832 data-nosnippet>832</a> }
-<a href=#833 id=833 data-nosnippet>833</a>}
-<a href=#834 id=834 data-nosnippet>834</a>
-<a href=#835 id=835 data-nosnippet>835</a><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>get_parquet_stat_min_as_datum(
-<a href=#836 id=836 data-nosnippet>836</a> primitive_type: <span class="kw-2">&</span>PrimitiveType,
-<a href=#837 id=837 data-nosnippet>837</a> stats: <span class="kw-2">&</span>Statistics,
-<a href=#838 id=838 data-nosnippet>838</a>) -> <span class="prelude-ty">Result</span><<span class="prelude-ty">Option</span><Datum>> {
-<a href=#839 id=839 data-nosnippet>839</a> <span class="prelude-val">Ok</span>(<span class="kw">match </span>(primitive_type, stats) {
-<a href=#840 id=840 data-nosnippet>840</a> (PrimitiveType::Boolean, Statistics::Boolean(stats)) => {
-<a href=#841 id=841 data-nosnippet>841</a> stats.min_opt().map(|val| Datum::bool(<span class="kw-2">*</span>val))
-<a href=#842 id=842 data-nosnippet>842</a> }
-<a href=#843 id=843 data-nosnippet>843</a> (PrimitiveType::Int, Statistics::Int32(stats)) => {
-<a href=#844 id=844 data-nosnippet>844</a> stats.min_opt().map(|val| Datum::int(<span class="kw-2">*</span>val))
-<a href=#845 id=845 data-nosnippet>845</a> }
-<a href=#846 id=846 data-nosnippet>846</a> (PrimitiveType::Date, Statistics::Int32(stats)) => {
-<a href=#847 id=847 data-nosnippet>847</a> stats.min_opt().map(|val| Datum::date(<span class="kw-2">*</span>val))
-<a href=#848 id=848 data-nosnippet>848</a> }
-<a href=#849 id=849 data-nosnippet>849</a> (PrimitiveType::Long, Statistics::Int64(stats)) => {
-<a href=#850 id=850 data-nosnippet>850</a> stats.min_opt().map(|val| Datum::long(<span class="kw-2">*</span>val))
-<a href=#851 id=851 data-nosnippet>851</a> }
-<a href=#852 id=852 data-nosnippet>852</a> (PrimitiveType::Time, Statistics::Int64(stats)) => {
-<a href=#853 id=853 data-nosnippet>853</a> <span class="kw">let </span><span class="prelude-val">Some</span>(val) = stats.min_opt() <span class="kw">else </span>{
-<a href=#854 id=854 data-nosnippet>854</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#855 id=855 data-nosnippet>855</a> };
-<a href=#856 id=856 data-nosnippet>856</a>
-<a href=#857 id=857 data-nosnippet>857</a> <span class="prelude-val">Some</span>(Datum::time_micros(<span class="kw-2">*</span>val)<span class="question-mark">?</span>)
-<a href=#858 id=858 data-nosnippet>858</a> }
-<a href=#859 id=859 data-nosnippet>859</a> (PrimitiveType::Timestamp, Statistics::Int64(stats)) => {
-<a href=#860 id=860 data-nosnippet>860</a> stats.min_opt().map(|val| Datum::timestamp_micros(<span class="kw-2">*</span>val))
-<a href=#861 id=861 data-nosnippet>861</a> }
-<a href=#862 id=862 data-nosnippet>862</a> (PrimitiveType::Timestamptz, Statistics::Int64(stats)) => {
-<a href=#863 id=863 data-nosnippet>863</a> stats.min_opt().map(|val| Datum::timestamptz_micros(<span class="kw-2">*</span>val))
+<a href=#827 id=827 data-nosnippet>827</a> (PrimitiveType::Float, PrimitiveLiteral::Float(value)) => {
+<a href=#828 id=828 data-nosnippet>828</a> <span class="prelude-val">Ok</span>(Arc::new(Float32Array::new_scalar(value.into_inner())))
+<a href=#829 id=829 data-nosnippet>829</a> }
+<a href=#830 id=830 data-nosnippet>830</a> (PrimitiveType::Double, PrimitiveLiteral::Double(value)) => {
+<a href=#831 id=831 data-nosnippet>831</a> <span class="prelude-val">Ok</span>(Arc::new(Float64Array::new_scalar(value.into_inner())))
+<a href=#832 id=832 data-nosnippet>832</a> }
+<a href=#833 id=833 data-nosnippet>833</a> (PrimitiveType::String, PrimitiveLiteral::String(value)) => {
+<a href=#834 id=834 data-nosnippet>834</a> <span class="prelude-val">Ok</span>(Arc::new(StringArray::new_scalar(value.as_str())))
+<a href=#835 id=835 data-nosnippet>835</a> }
+<a href=#836 id=836 data-nosnippet>836</a> (PrimitiveType::Binary, PrimitiveLiteral::Binary(value)) => {
+<a href=#837 id=837 data-nosnippet>837</a> <span class="prelude-val">Ok</span>(Arc::new(BinaryArray::new_scalar(value.as_slice())))
+<a href=#838 id=838 data-nosnippet>838</a> }
+<a href=#839 id=839 data-nosnippet>839</a> (PrimitiveType::Date, PrimitiveLiteral::Int(value)) => {
+<a href=#840 id=840 data-nosnippet>840</a> <span class="prelude-val">Ok</span>(Arc::new(Date32Array::new_scalar(<span class="kw-2">*</span>value)))
+<a href=#841 id=841 data-nosnippet>841</a> }
+<a href=#842 id=842 data-nosnippet>842</a> (PrimitiveType::Timestamp, PrimitiveLiteral::Long(value)) => {
+<a href=#843 id=843 data-nosnippet>843</a> <span class="prelude-val">Ok</span>(Arc::new(TimestampMicrosecondArray::new_scalar(<span class="kw-2">*</span>value)))
+<a href=#844 id=844 data-nosnippet>844</a> }
+<a href=#845 id=845 data-nosnippet>845</a> (PrimitiveType::Timestamptz, PrimitiveLiteral::Long(value)) => <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(
+<a href=#846 id=846 data-nosnippet>846</a> TimestampMicrosecondArray::new(<span class="macro">vec!</span>[<span class="kw-2">*</span>value; <span class="number">1</span>].into(), <span class="prelude-val">None</span>).with_timezone_utc(),
+<a href=#847 id=847 data-nosnippet>847</a> ))),
+<a href=#848 id=848 data-nosnippet>848</a> (PrimitiveType::TimestampNs, PrimitiveLiteral::Long(value)) => {
+<a href=#849 id=849 data-nosnippet>849</a> <span class="prelude-val">Ok</span>(Arc::new(TimestampNanosecondArray::new_scalar(<span class="kw-2">*</span>value)))
+<a href=#850 id=850 data-nosnippet>850</a> }
+<a href=#851 id=851 data-nosnippet>851</a> (PrimitiveType::TimestamptzNs, PrimitiveLiteral::Long(value)) => <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(
+<a href=#852 id=852 data-nosnippet>852</a> TimestampNanosecondArray::new(<span class="macro">vec!</span>[<span class="kw-2">*</span>value; <span class="number">1</span>].into(), <span class="prelude-val">None</span>).with_timezone_utc(),
+<a href=#853 id=853 data-nosnippet>853</a> ))),
+<a href=#854 id=854 data-nosnippet>854</a> (PrimitiveType::Decimal { precision, scale }, PrimitiveLiteral::Int128(value)) => {
+<a href=#855 id=855 data-nosnippet>855</a> <span class="kw">let </span>array = Decimal128Array::from_value(<span class="kw-2">*</span>value, <span class="number">1</span>)
+<a href=#856 id=856 data-nosnippet>856</a> .with_precision_and_scale(<span class="kw-2">*</span>precision <span class="kw">as _</span>, <span class="kw-2">*</span>scale <span class="kw">as _</span>)
+<a href=#857 id=857 data-nosnippet>857</a> .unwrap();
+<a href=#858 id=858 data-nosnippet>858</a> <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(array)))
+<a href=#859 id=859 data-nosnippet>859</a> }
+<a href=#860 id=860 data-nosnippet>860</a> (PrimitiveType::Uuid, PrimitiveLiteral::UInt128(value)) => {
+<a href=#861 id=861 data-nosnippet>861</a> <span class="kw">let </span>bytes = Uuid::from_u128(<span class="kw-2">*</span>value).into_bytes();
+<a href=#862 id=862 data-nosnippet>862</a> <span class="kw">let </span>array = FixedSizeBinaryArray::try_from_iter(<span class="macro">vec!</span>[bytes].into_iter()).unwrap();
+<a href=#863 id=863 data-nosnippet>863</a> <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(array)))
<a href=#864 id=864 data-nosnippet>864</a> }
-<a href=#865 id=865 data-nosnippet>865</a> (PrimitiveType::TimestampNs, Statistics::Int64(stats)) => {
-<a href=#866 id=866 data-nosnippet>866</a> stats.min_opt().map(|val| Datum::timestamp_nanos(<span class="kw-2">*</span>val))
-<a href=#867 id=867 data-nosnippet>867</a> }
-<a href=#868 id=868 data-nosnippet>868</a> (PrimitiveType::TimestamptzNs, Statistics::Int64(stats)) => {
-<a href=#869 id=869 data-nosnippet>869</a> stats.min_opt().map(|val| Datum::timestamptz_nanos(<span class="kw-2">*</span>val))
-<a href=#870 id=870 data-nosnippet>870</a> }
-<a href=#871 id=871 data-nosnippet>871</a> (PrimitiveType::Float, Statistics::Float(stats)) => {
-<a href=#872 id=872 data-nosnippet>872</a> stats.min_opt().map(|val| Datum::float(<span class="kw-2">*</span>val))
-<a href=#873 id=873 data-nosnippet>873</a> }
-<a href=#874 id=874 data-nosnippet>874</a> (PrimitiveType::Double, Statistics::Double(stats)) => {
-<a href=#875 id=875 data-nosnippet>875</a> stats.min_opt().map(|val| Datum::double(<span class="kw-2">*</span>val))
-<a href=#876 id=876 data-nosnippet>876</a> }
-<a href=#877 id=877 data-nosnippet>877</a> (PrimitiveType::String, Statistics::ByteArray(stats)) => {
-<a href=#878 id=878 data-nosnippet>878</a> <span class="kw">let </span><span class="prelude-val">Some</span>(val) = stats.min_opt() <span class="kw">else </span>{
-<a href=#879 id=879 data-nosnippet>879</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#880 id=880 data-nosnippet>880</a> };
-<a href=#881 id=881 data-nosnippet>881</a>
-<a href=#882 id=882 data-nosnippet>882</a> <span class="prelude-val">Some</span>(Datum::string(val.as_utf8()<span class="question-mark">?</span>))
-<a href=#883 id=883 data-nosnippet>883</a> }
-<a href=#884 id=884 data-nosnippet>884</a> (
-<a href=#885 id=885 data-nosnippet>885</a> PrimitiveType::Decimal {
-<a href=#886 id=886 data-nosnippet>886</a> precision: <span class="kw">_</span>,
-<a href=#887 id=887 data-nosnippet>887</a> scale: <span class="kw">_</span>,
-<a href=#888 id=888 data-nosnippet>888</a> },
-<a href=#889 id=889 data-nosnippet>889</a> Statistics::ByteArray(stats),
-<a href=#890 id=890 data-nosnippet>890</a> ) => {
-<a href=#891 id=891 data-nosnippet>891</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.min_bytes_opt() <span class="kw">else </span>{
-<a href=#892 id=892 data-nosnippet>892</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#893 id=893 data-nosnippet>893</a> };
-<a href=#894 id=894 data-nosnippet>894</a> <span class="prelude-val">Some</span>(Datum::new(
-<a href=#895 id=895 data-nosnippet>895</a> primitive_type.clone(),
-<a href=#896 id=896 data-nosnippet>896</a> PrimitiveLiteral::Int128(
-<a href=#897 id=897 data-nosnippet>897</a> <span class="comment">// An empty bound carries no value; reject it rather than
-<a href=#898 id=898 data-nosnippet>898</a> // decode it as zero, which could prune matching row groups.
-<a href=#899 id=899 data-nosnippet>899</a> </span>i128_from_be_bytes(bytes)
-<a href=#900 id=900 data-nosnippet>900</a> .filter(|<span class="kw">_</span>| !bytes.is_empty())
-<a href=#901 id=901 data-nosnippet>901</a> .ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Can't convert bytes to i128: {bytes:?}"</span>))<span class="question-mark">?</span>,
-<a href=#902 id=902 data-nosnippet>902</a> ),
-<a href=#903 id=903 data-nosnippet>903</a> ))
+<a href=#865 id=865 data-nosnippet>865</a> (PrimitiveType::Fixed(<span class="kw">_</span>), PrimitiveLiteral::Binary(value)) => {
+<a href=#866 id=866 data-nosnippet>866</a> <span class="kw">let </span>array = FixedSizeBinaryArray::try_from_iter(std::iter::once(value.as_slice()))
+<a href=#867 id=867 data-nosnippet>867</a> .map_err(|e| <span class="macro">invalid_data!</span>(<span class="string">"FixedSizeBinary conversion failed"</span>).with_source(e))<span class="question-mark">?</span>;
+<a href=#868 id=868 data-nosnippet>868</a> <span class="prelude-val">Ok</span>(Arc::new(Scalar::new(array)))
+<a href=#869 id=869 data-nosnippet>869</a> }
+<a href=#870 id=870 data-nosnippet>870</a>
+<a href=#871 id=871 data-nosnippet>871</a> (primitive_type, <span class="kw">_</span>) => <span class="prelude-val">Err</span>(Error::new(
+<a href=#872 id=872 data-nosnippet>872</a> ErrorKind::FeatureUnsupported,
+<a href=#873 id=873 data-nosnippet>873</a> <span class="macro">format!</span>(<span class="string">"Converting datum from type {primitive_type:?} to arrow not supported yet."</span>),
+<a href=#874 id=874 data-nosnippet>874</a> )),
+<a href=#875 id=875 data-nosnippet>875</a> }
+<a href=#876 id=876 data-nosnippet>876</a>}
+<a href=#877 id=877 data-nosnippet>877</a>
+<a href=#878 id=878 data-nosnippet>878</a><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>get_parquet_stat_min_as_datum(
+<a href=#879 id=879 data-nosnippet>879</a> primitive_type: <span class="kw-2">&</span>PrimitiveType,
+<a href=#880 id=880 data-nosnippet>880</a> stats: <span class="kw-2">&</span>Statistics,
+<a href=#881 id=881 data-nosnippet>881</a>) -> <span class="prelude-ty">Result</span><<span class="prelude-ty">Option</span><Datum>> {
+<a href=#882 id=882 data-nosnippet>882</a> <span class="prelude-val">Ok</span>(<span class="kw">match </span>(primitive_type, stats) {
+<a href=#883 id=883 data-nosnippet>883</a> (PrimitiveType::Boolean, Statistics::Boolean(stats)) => {
+<a href=#884 id=884 data-nosnippet>884</a> stats.min_opt().map(|val| Datum::bool(<span class="kw-2">*</span>val))
+<a href=#885 id=885 data-nosnippet>885</a> }
+<a href=#886 id=886 data-nosnippet>886</a> (PrimitiveType::Int, Statistics::Int32(stats)) => {
+<a href=#887 id=887 data-nosnippet>887</a> stats.min_opt().map(|val| Datum::int(<span class="kw-2">*</span>val))
+<a href=#888 id=888 data-nosnippet>888</a> }
+<a href=#889 id=889 data-nosnippet>889</a> (PrimitiveType::Date, Statistics::Int32(stats)) => {
+<a href=#890 id=890 data-nosnippet>890</a> stats.min_opt().map(|val| Datum::date(<span class="kw-2">*</span>val))
+<a href=#891 id=891 data-nosnippet>891</a> }
+<a href=#892 id=892 data-nosnippet>892</a> (PrimitiveType::Long, Statistics::Int64(stats)) => {
+<a href=#893 id=893 data-nosnippet>893</a> stats.min_opt().map(|val| Datum::long(<span class="kw-2">*</span>val))
+<a href=#894 id=894 data-nosnippet>894</a> }
+<a href=#895 id=895 data-nosnippet>895</a> (PrimitiveType::Time, Statistics::Int64(stats)) => {
+<a href=#896 id=896 data-nosnippet>896</a> <span class="kw">let </span><span class="prelude-val">Some</span>(val) = stats.min_opt() <span class="kw">else </span>{
+<a href=#897 id=897 data-nosnippet>897</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#898 id=898 data-nosnippet>898</a> };
+<a href=#899 id=899 data-nosnippet>899</a>
+<a href=#900 id=900 data-nosnippet>900</a> <span class="prelude-val">Some</span>(Datum::time_micros(<span class="kw-2">*</span>val)<span class="question-mark">?</span>)
+<a href=#901 id=901 data-nosnippet>901</a> }
+<a href=#902 id=902 data-nosnippet>902</a> (PrimitiveType::Timestamp, Statistics::Int64(stats)) => {
+<a href=#903 id=903 data-nosnippet>903</a> stats.min_opt().map(|val| Datum::timestamp_micros(<span class="kw-2">*</span>val))
<a href=#904 id=904 data-nosnippet>904</a> }
-<a href=#905 id=905 data-nosnippet>905</a> (
-<a href=#906 id=906 data-nosnippet>906</a> PrimitiveType::Decimal {
-<a href=#907 id=907 data-nosnippet>907</a> precision: <span class="kw">_</span>,
-<a href=#908 id=908 data-nosnippet>908</a> scale: <span class="kw">_</span>,
-<a href=#909 id=909 data-nosnippet>909</a> },
-<a href=#910 id=910 data-nosnippet>910</a> Statistics::FixedLenByteArray(stats),
-<a href=#911 id=911 data-nosnippet>911</a> ) => {
-<a href=#912 id=912 data-nosnippet>912</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.min_bytes_opt() <span class="kw">else </span>{
-<a href=#913 id=913 data-nosnippet>913</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#914 id=914 data-nosnippet>914</a> };
-<a href=#915 id=915 data-nosnippet>915</a> <span class="prelude-val">Some</span>(Datum::new(
-<a href=#916 id=916 data-nosnippet>916</a> primitive_type.clone(),
-<a href=#917 id=917 data-nosnippet>917</a> PrimitiveLiteral::Int128(
-<a href=#918 id=918 data-nosnippet>918</a> i128_from_be_bytes(bytes)
-<a href=#919 id=919 data-nosnippet>919</a> .ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Can't convert bytes to i128: {bytes:?}"</span>))<span class="question-mark">?</span>,
-<a href=#920 id=920 data-nosnippet>920</a> ),
-<a href=#921 id=921 data-nosnippet>921</a> ))
-<a href=#922 id=922 data-nosnippet>922</a> }
-<a href=#923 id=923 data-nosnippet>923</a> (
-<a href=#924 id=924 data-nosnippet>924</a> PrimitiveType::Decimal {
-<a href=#925 id=925 data-nosnippet>925</a> precision: <span class="kw">_</span>,
-<a href=#926 id=926 data-nosnippet>926</a> scale: <span class="kw">_</span>,
-<a href=#927 id=927 data-nosnippet>927</a> },
-<a href=#928 id=928 data-nosnippet>928</a> Statistics::Int32(stats),
-<a href=#929 id=929 data-nosnippet>929</a> ) => stats.min_opt().map(|val| {
-<a href=#930 id=930 data-nosnippet>930</a> Datum::new(
-<a href=#931 id=931 data-nosnippet>931</a> primitive_type.clone(),
-<a href=#932 id=932 data-nosnippet>932</a> PrimitiveLiteral::Int128(i128::from(<span class="kw-2">*</span>val)),
-<a href=#933 id=933 data-nosnippet>933</a> )
-<a href=#934 id=934 data-nosnippet>934</a> }),
-<a href=#935 id=935 data-nosnippet>935</a>
-<a href=#936 id=936 data-nosnippet>936</a> (
-<a href=#937 id=937 data-nosnippet>937</a> PrimitiveType::Decimal {
-<a href=#938 id=938 data-nosnippet>938</a> precision: <span class="kw">_</span>,
-<a href=#939 id=939 data-nosnippet>939</a> scale: <span class="kw">_</span>,
-<a href=#940 id=940 data-nosnippet>940</a> },
-<a href=#941 id=941 data-nosnippet>941</a> Statistics::Int64(stats),
-<a href=#942 id=942 data-nosnippet>942</a> ) => stats.min_opt().map(|val| {
-<a href=#943 id=943 data-nosnippet>943</a> Datum::new(
-<a href=#944 id=944 data-nosnippet>944</a> primitive_type.clone(),
-<a href=#945 id=945 data-nosnippet>945</a> PrimitiveLiteral::Int128(i128::from(<span class="kw-2">*</span>val)),
-<a href=#946 id=946 data-nosnippet>946</a> )
-<a href=#947 id=947 data-nosnippet>947</a> }),
-<a href=#948 id=948 data-nosnippet>948</a> (PrimitiveType::Uuid, Statistics::FixedLenByteArray(stats)) => {
-<a href=#949 id=949 data-nosnippet>949</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.min_bytes_opt() <span class="kw">else </span>{
-<a href=#950 id=950 data-nosnippet>950</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#951 id=951 data-nosnippet>951</a> };
-<a href=#952 id=952 data-nosnippet>952</a> <span class="kw">if </span>bytes.len() != <span class="number">16 </span>{
-<a href=#953 id=953 data-nosnippet>953</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#954 id=954 data-nosnippet>954</a> ErrorKind::Unexpected,
-<a href=#955 id=955 data-nosnippet>955</a> <span class="string">"Invalid length of uuid bytes."</span>,
-<a href=#956 id=956 data-nosnippet>956</a> ));
-<a href=#957 id=957 data-nosnippet>957</a> }
-<a href=#958 id=958 data-nosnippet>958</a> <span class="prelude-val">Some</span>(Datum::uuid(Uuid::from_bytes(
-<a href=#959 id=959 data-nosnippet>959</a> bytes[..<span class="number">16</span>].try_into().unwrap(),
-<a href=#960 id=960 data-nosnippet>960</a> )))
-<a href=#961 id=961 data-nosnippet>961</a> }
-<a href=#962 id=962 data-nosnippet>962</a> (PrimitiveType::Fixed(len), Statistics::FixedLenByteArray(stat)) => {
-<a href=#963 id=963 data-nosnippet>963</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stat.min_bytes_opt() <span class="kw">else </span>{
-<a href=#964 id=964 data-nosnippet>964</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#965 id=965 data-nosnippet>965</a> };
-<a href=#966 id=966 data-nosnippet>966</a> <span class="kw">if </span>bytes.len() != <span class="kw-2">*</span>len <span class="kw">as </span>usize {
-<a href=#967 id=967 data-nosnippet>967</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#968 id=968 data-nosnippet>968</a> ErrorKind::Unexpected,
-<a href=#969 id=969 data-nosnippet>969</a> <span class="string">"Invalid length of fixed bytes."</span>,
-<a href=#970 id=970 data-nosnippet>970</a> ));
-<a href=#971 id=971 data-nosnippet>971</a> }
-<a href=#972 id=972 data-nosnippet>972</a> <span class="prelude-val">Some</span>(Datum::fixed(bytes.to_vec()))
-<a href=#973 id=973 data-nosnippet>973</a> }
-<a href=#974 id=974 data-nosnippet>974</a> (PrimitiveType::Binary, Statistics::ByteArray(stat)) => {
-<a href=#975 id=975 data-nosnippet>975</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(stat
-<a href=#976 id=976 data-nosnippet>976</a> .min_bytes_opt()
-<a href=#977 id=977 data-nosnippet>977</a> .map(|bytes| Datum::binary(bytes.to_vec())));
-<a href=#978 id=978 data-nosnippet>978</a> }
-<a href=#979 id=979 data-nosnippet>979</a> <span class="kw">_ </span>=> {
-<a href=#980 id=980 data-nosnippet>980</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#981 id=981 data-nosnippet>981</a> }
-<a href=#982 id=982 data-nosnippet>982</a> })
-<a href=#983 id=983 data-nosnippet>983</a>}
-<a href=#984 id=984 data-nosnippet>984</a>
-<a href=#985 id=985 data-nosnippet>985</a><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>get_parquet_stat_max_as_datum(
-<a href=#986 id=986 data-nosnippet>986</a> primitive_type: <span class="kw-2">&</span>PrimitiveType,
-<a href=#987 id=987 data-nosnippet>987</a> stats: <span class="kw-2">&</span>Statistics,
-<a href=#988 id=988 data-nosnippet>988</a>) -> <span class="prelude-ty">Result</span><<span class="prelude-ty">Option</span><Datum>> {
-<a href=#989 id=989 data-nosnippet>989</a> <span class="prelude-val">Ok</span>(<span class="kw">match </span>(primitive_type, stats) {
-<a href=#990 id=990 data-nosnippet>990</a> (PrimitiveType::Boolean, Statistics::Boolean(stats)) => {
-<a href=#991 id=991 data-nosnippet>991</a> stats.max_opt().map(|val| Datum::bool(<span class="kw-2">*</span>val))
-<a href=#992 id=992 data-nosnippet>992</a> }
-<a href=#993 id=993 data-nosnippet>993</a> (PrimitiveType::Int, Statistics::Int32(stats)) => {
-<a href=#994 id=994 data-nosnippet>994</a> stats.max_opt().map(|val| Datum::int(<span class="kw-2">*</span>val))
-<a href=#995 id=995 data-nosnippet>995</a> }
-<a href=#996 id=996 data-nosnippet>996</a> (PrimitiveType::Date, Statistics::Int32(stats)) => {
-<a href=#997 id=997 data-nosnippet>997</a> stats.max_opt().map(|val| Datum::date(<span class="kw-2">*</span>val))
-<a href=#998 id=998 data-nosnippet>998</a> }
-<a href=#999 id=999 data-nosnippet>999</a> (PrimitiveType::Long, Statistics::Int64(stats)) => {
-<a href=#1000 id=1000 data-nosnippet>1000</a> stats.max_opt().map(|val| Datum::long(<span class="kw-2">*</span>val))
-<a href=#1001 id=1001 data-nosnippet>1001</a> }
-<a href=#1002 id=1002 data-nosnippet>1002</a> (PrimitiveType::Time, Statistics::Int64(stats)) => {
-<a href=#1003 id=1003 data-nosnippet>1003</a> <span class="kw">let </span><span class="prelude-val">Some</span>(val) = stats.max_opt() <span class="kw">else </span>{
-<a href=#1004 id=1004 data-nosnippet>1004</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#1005 id=1005 data-nosnippet>1005</a> };
-<a href=#1006 id=1006 data-nosnippet>1006</a>
-<a href=#1007 id=1007 data-nosnippet>1007</a> <span class="prelude-val">Some</span>(Datum::time_micros(<span class="kw-2">*</span>val)<span class="question-mark">?</span>)
-<a href=#1008 id=1008 data-nosnippet>1008</a> }
-<a href=#1009 id=1009 data-nosnippet>1009</a> (PrimitiveType::Timestamp, Statistics::Int64(stats)) => {
-<a href=#1010 id=1010 data-nosnippet>1010</a> stats.max_opt().map(|val| Datum::timestamp_micros(<span class="kw-2">*</span>val))
-<a href=#1011 id=1011 data-nosnippet>1011</a> }
-<a href=#1012 id=1012 data-nosnippet>1012</a> (PrimitiveType::Timestamptz, Statistics::Int64(stats)) => {
-<a href=#1013 id=1013 data-nosnippet>1013</a> stats.max_opt().map(|val| Datum::timestamptz_micros(<span class="kw-2">*</span>val))
-<a href=#1014 id=1014 data-nosnippet>1014</a> }
-<a href=#1015 id=1015 data-nosnippet>1015</a> (PrimitiveType::TimestampNs, Statistics::Int64(stats)) => {
-<a href=#1016 id=1016 data-nosnippet>1016</a> stats.max_opt().map(|val| Datum::timestamp_nanos(<span class="kw-2">*</span>val))
-<a href=#1017 id=1017 data-nosnippet>1017</a> }
-<a href=#1018 id=1018 data-nosnippet>1018</a> (PrimitiveType::TimestamptzNs, Statistics::Int64(stats)) => {
-<a href=#1019 id=1019 data-nosnippet>1019</a> stats.max_opt().map(|val| Datum::timestamptz_nanos(<span class="kw-2">*</span>val))
-<a href=#1020 id=1020 data-nosnippet>1020</a> }
-<a href=#1021 id=1021 data-nosnippet>1021</a> (PrimitiveType::Float, Statistics::Float(stats)) => {
-<a href=#1022 id=1022 data-nosnippet>1022</a> stats.max_opt().map(|val| Datum::float(<span class="kw-2">*</span>val))
-<a href=#1023 id=1023 data-nosnippet>1023</a> }
-<a href=#1024 id=1024 data-nosnippet>1024</a> (PrimitiveType::Double, Statistics::Double(stats)) => {
-<a href=#1025 id=1025 data-nosnippet>1025</a> stats.max_opt().map(|val| Datum::double(<span class="kw-2">*</span>val))
-<a href=#1026 id=1026 data-nosnippet>1026</a> }
-<a href=#1027 id=1027 data-nosnippet>1027</a> (PrimitiveType::String, Statistics::ByteArray(stats)) => {
-<a href=#1028 id=1028 data-nosnippet>1028</a> <span class="kw">let </span><span class="prelude-val">Some</span>(val) = stats.max_opt() <span class="kw">else </span>{
-<a href=#1029 id=1029 data-nosnippet>1029</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#1030 id=1030 data-nosnippet>1030</a> };
-<a href=#1031 id=1031 data-nosnippet>1031</a>
-<a href=#1032 id=1032 data-nosnippet>1032</a> <span class="prelude-val">Some</span>(Datum::string(val.as_utf8()<span class="question-mark">?</span>))
-<a href=#1033 id=1033 data-nosnippet>1033</a> }
-<a href=#1034 id=1034 data-nosnippet>1034</a> (
-<a href=#1035 id=1035 data-nosnippet>1035</a> PrimitiveType::Decimal {
-<a href=#1036 id=1036 data-nosnippet>1036</a> precision: <span class="kw">_</span>,
-<a href=#1037 id=1037 data-nosnippet>1037</a> scale: <span class="kw">_</span>,
-<a href=#1038 id=1038 data-nosnippet>1038</a> },
-<a href=#1039 id=1039 data-nosnippet>1039</a> Statistics::ByteArray(stats),
-<a href=#1040 id=1040 data-nosnippet>1040</a> ) => {
-<a href=#1041 id=1041 data-nosnippet>1041</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.max_bytes_opt() <span class="kw">else </span>{
-<a href=#1042 id=1042 data-nosnippet>1042</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#1043 id=1043 data-nosnippet>1043</a> };
-<a href=#1044 id=1044 data-nosnippet>1044</a> <span class="prelude-val">Some</span>(Datum::new(
-<a href=#1045 id=1045 data-nosnippet>1045</a> primitive_type.clone(),
-<a href=#1046 id=1046 data-nosnippet>1046</a> PrimitiveLiteral::Int128(
-<a href=#1047 id=1047 data-nosnippet>1047</a> <span class="comment">// An empty bound carries no value; reject it rather than
-<a href=#1048 id=1048 data-nosnippet>1048</a> // decode it as zero, which could prune matching row groups.
-<a href=#1049 id=1049 data-nosnippet>1049</a> </span>i128_from_be_bytes(bytes)
-<a href=#1050 id=1050 data-nosnippet>1050</a> .filter(|<span class="kw">_</span>| !bytes.is_empty())
-<a href=#1051 id=1051 data-nosnippet>1051</a> .ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Can't convert bytes to i128: {bytes:?}"</span>))<span class="question-mark">?</span>,
-<a href=#1052 id=1052 data-nosnippet>1052</a> ),
-<a href=#1053 id=1053 data-nosnippet>1053</a> ))
+<a href=#905 id=905 data-nosnippet>905</a> (PrimitiveType::Timestamptz, Statistics::Int64(stats)) => {
+<a href=#906 id=906 data-nosnippet>906</a> stats.min_opt().map(|val| Datum::timestamptz_micros(<span class="kw-2">*</span>val))
+<a href=#907 id=907 data-nosnippet>907</a> }
+<a href=#908 id=908 data-nosnippet>908</a> (PrimitiveType::TimestampNs, Statistics::Int64(stats)) => {
+<a href=#909 id=909 data-nosnippet>909</a> stats.min_opt().map(|val| Datum::timestamp_nanos(<span class="kw-2">*</span>val))
+<a href=#910 id=910 data-nosnippet>910</a> }
+<a href=#911 id=911 data-nosnippet>911</a> (PrimitiveType::TimestamptzNs, Statistics::Int64(stats)) => {
+<a href=#912 id=912 data-nosnippet>912</a> stats.min_opt().map(|val| Datum::timestamptz_nanos(<span class="kw-2">*</span>val))
+<a href=#913 id=913 data-nosnippet>913</a> }
+<a href=#914 id=914 data-nosnippet>914</a> (PrimitiveType::Float, Statistics::Float(stats)) => {
+<a href=#915 id=915 data-nosnippet>915</a> stats.min_opt().map(|val| Datum::float(<span class="kw-2">*</span>val))
+<a href=#916 id=916 data-nosnippet>916</a> }
+<a href=#917 id=917 data-nosnippet>917</a> (PrimitiveType::Double, Statistics::Double(stats)) => {
+<a href=#918 id=918 data-nosnippet>918</a> stats.min_opt().map(|val| Datum::double(<span class="kw-2">*</span>val))
+<a href=#919 id=919 data-nosnippet>919</a> }
+<a href=#920 id=920 data-nosnippet>920</a> (PrimitiveType::String, Statistics::ByteArray(stats)) => {
+<a href=#921 id=921 data-nosnippet>921</a> <span class="kw">let </span><span class="prelude-val">Some</span>(val) = stats.min_opt() <span class="kw">else </span>{
+<a href=#922 id=922 data-nosnippet>922</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#923 id=923 data-nosnippet>923</a> };
+<a href=#924 id=924 data-nosnippet>924</a>
+<a href=#925 id=925 data-nosnippet>925</a> <span class="prelude-val">Some</span>(Datum::string(val.as_utf8()<span class="question-mark">?</span>))
+<a href=#926 id=926 data-nosnippet>926</a> }
+<a href=#927 id=927 data-nosnippet>927</a> (
+<a href=#928 id=928 data-nosnippet>928</a> PrimitiveType::Decimal {
+<a href=#929 id=929 data-nosnippet>929</a> precision: <span class="kw">_</span>,
+<a href=#930 id=930 data-nosnippet>930</a> scale: <span class="kw">_</span>,
+<a href=#931 id=931 data-nosnippet>931</a> },
+<a href=#932 id=932 data-nosnippet>932</a> Statistics::ByteArray(stats),
+<a href=#933 id=933 data-nosnippet>933</a> ) => {
+<a href=#934 id=934 data-nosnippet>934</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.min_bytes_opt() <span class="kw">else </span>{
+<a href=#935 id=935 data-nosnippet>935</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#936 id=936 data-nosnippet>936</a> };
+<a href=#937 id=937 data-nosnippet>937</a> <span class="prelude-val">Some</span>(Datum::new(
+<a href=#938 id=938 data-nosnippet>938</a> primitive_type.clone(),
+<a href=#939 id=939 data-nosnippet>939</a> PrimitiveLiteral::Int128(
+<a href=#940 id=940 data-nosnippet>940</a> <span class="comment">// An empty bound carries no value; reject it rather than
+<a href=#941 id=941 data-nosnippet>941</a> // decode it as zero, which could prune matching row groups.
+<a href=#942 id=942 data-nosnippet>942</a> </span>i128_from_be_bytes(bytes)
+<a href=#943 id=943 data-nosnippet>943</a> .filter(|<span class="kw">_</span>| !bytes.is_empty())
+<a href=#944 id=944 data-nosnippet>944</a> .ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Can't convert bytes to i128: {bytes:?}"</span>))<span class="question-mark">?</span>,
+<a href=#945 id=945 data-nosnippet>945</a> ),
+<a href=#946 id=946 data-nosnippet>946</a> ))
+<a href=#947 id=947 data-nosnippet>947</a> }
+<a href=#948 id=948 data-nosnippet>948</a> (
+<a href=#949 id=949 data-nosnippet>949</a> PrimitiveType::Decimal {
+<a href=#950 id=950 data-nosnippet>950</a> precision: <span class="kw">_</span>,
+<a href=#951 id=951 data-nosnippet>951</a> scale: <span class="kw">_</span>,
+<a href=#952 id=952 data-nosnippet>952</a> },
+<a href=#953 id=953 data-nosnippet>953</a> Statistics::FixedLenByteArray(stats),
+<a href=#954 id=954 data-nosnippet>954</a> ) => {
+<a href=#955 id=955 data-nosnippet>955</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.min_bytes_opt() <span class="kw">else </span>{
+<a href=#956 id=956 data-nosnippet>956</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#957 id=957 data-nosnippet>957</a> };
+<a href=#958 id=958 data-nosnippet>958</a> <span class="prelude-val">Some</span>(Datum::new(
+<a href=#959 id=959 data-nosnippet>959</a> primitive_type.clone(),
+<a href=#960 id=960 data-nosnippet>960</a> PrimitiveLiteral::Int128(
+<a href=#961 id=961 data-nosnippet>961</a> i128_from_be_bytes(bytes)
+<a href=#962 id=962 data-nosnippet>962</a> .ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Can't convert bytes to i128: {bytes:?}"</span>))<span class="question-mark">?</span>,
+<a href=#963 id=963 data-nosnippet>963</a> ),
+<a href=#964 id=964 data-nosnippet>964</a> ))
+<a href=#965 id=965 data-nosnippet>965</a> }
+<a href=#966 id=966 data-nosnippet>966</a> (
+<a href=#967 id=967 data-nosnippet>967</a> PrimitiveType::Decimal {
+<a href=#968 id=968 data-nosnippet>968</a> precision: <span class="kw">_</span>,
+<a href=#969 id=969 data-nosnippet>969</a> scale: <span class="kw">_</span>,
+<a href=#970 id=970 data-nosnippet>970</a> },
+<a href=#971 id=971 data-nosnippet>971</a> Statistics::Int32(stats),
+<a href=#972 id=972 data-nosnippet>972</a> ) => stats.min_opt().map(|val| {
+<a href=#973 id=973 data-nosnippet>973</a> Datum::new(
+<a href=#974 id=974 data-nosnippet>974</a> primitive_type.clone(),
+<a href=#975 id=975 data-nosnippet>975</a> PrimitiveLiteral::Int128(i128::from(<span class="kw-2">*</span>val)),
+<a href=#976 id=976 data-nosnippet>976</a> )
+<a href=#977 id=977 data-nosnippet>977</a> }),
+<a href=#978 id=978 data-nosnippet>978</a>
+<a href=#979 id=979 data-nosnippet>979</a> (
+<a href=#980 id=980 data-nosnippet>980</a> PrimitiveType::Decimal {
+<a href=#981 id=981 data-nosnippet>981</a> precision: <span class="kw">_</span>,
+<a href=#982 id=982 data-nosnippet>982</a> scale: <span class="kw">_</span>,
+<a href=#983 id=983 data-nosnippet>983</a> },
+<a href=#984 id=984 data-nosnippet>984</a> Statistics::Int64(stats),
+<a href=#985 id=985 data-nosnippet>985</a> ) => stats.min_opt().map(|val| {
+<a href=#986 id=986 data-nosnippet>986</a> Datum::new(
+<a href=#987 id=987 data-nosnippet>987</a> primitive_type.clone(),
+<a href=#988 id=988 data-nosnippet>988</a> PrimitiveLiteral::Int128(i128::from(<span class="kw-2">*</span>val)),
+<a href=#989 id=989 data-nosnippet>989</a> )
+<a href=#990 id=990 data-nosnippet>990</a> }),
+<a href=#991 id=991 data-nosnippet>991</a> (PrimitiveType::Uuid, Statistics::FixedLenByteArray(stats)) => {
+<a href=#992 id=992 data-nosnippet>992</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.min_bytes_opt() <span class="kw">else </span>{
+<a href=#993 id=993 data-nosnippet>993</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#994 id=994 data-nosnippet>994</a> };
+<a href=#995 id=995 data-nosnippet>995</a> <span class="kw">if </span>bytes.len() != <span class="number">16 </span>{
+<a href=#996 id=996 data-nosnippet>996</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#997 id=997 data-nosnippet>997</a> ErrorKind::Unexpected,
+<a href=#998 id=998 data-nosnippet>998</a> <span class="string">"Invalid length of uuid bytes."</span>,
+<a href=#999 id=999 data-nosnippet>999</a> ));
+<a href=#1000 id=1000 data-nosnippet>1000</a> }
+<a href=#1001 id=1001 data-nosnippet>1001</a> <span class="prelude-val">Some</span>(Datum::uuid(Uuid::from_bytes(
+<a href=#1002 id=1002 data-nosnippet>1002</a> bytes[..<span class="number">16</span>].try_into().unwrap(),
+<a href=#1003 id=1003 data-nosnippet>1003</a> )))
+<a href=#1004 id=1004 data-nosnippet>1004</a> }
+<a href=#1005 id=1005 data-nosnippet>1005</a> (PrimitiveType::Fixed(len), Statistics::FixedLenByteArray(stat)) => {
+<a href=#1006 id=1006 data-nosnippet>1006</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stat.min_bytes_opt() <span class="kw">else </span>{
+<a href=#1007 id=1007 data-nosnippet>1007</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#1008 id=1008 data-nosnippet>1008</a> };
+<a href=#1009 id=1009 data-nosnippet>1009</a> <span class="kw">if </span>bytes.len() != <span class="kw-2">*</span>len <span class="kw">as </span>usize {
+<a href=#1010 id=1010 data-nosnippet>1010</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#1011 id=1011 data-nosnippet>1011</a> ErrorKind::Unexpected,
+<a href=#1012 id=1012 data-nosnippet>1012</a> <span class="string">"Invalid length of fixed bytes."</span>,
+<a href=#1013 id=1013 data-nosnippet>1013</a> ));
+<a href=#1014 id=1014 data-nosnippet>1014</a> }
+<a href=#1015 id=1015 data-nosnippet>1015</a> <span class="prelude-val">Some</span>(Datum::fixed(bytes.to_vec()))
+<a href=#1016 id=1016 data-nosnippet>1016</a> }
+<a href=#1017 id=1017 data-nosnippet>1017</a> (PrimitiveType::Binary, Statistics::ByteArray(stat)) => {
+<a href=#1018 id=1018 data-nosnippet>1018</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(stat
+<a href=#1019 id=1019 data-nosnippet>1019</a> .min_bytes_opt()
+<a href=#1020 id=1020 data-nosnippet>1020</a> .map(|bytes| Datum::binary(bytes.to_vec())));
+<a href=#1021 id=1021 data-nosnippet>1021</a> }
+<a href=#1022 id=1022 data-nosnippet>1022</a> <span class="kw">_ </span>=> {
+<a href=#1023 id=1023 data-nosnippet>1023</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#1024 id=1024 data-nosnippet>1024</a> }
+<a href=#1025 id=1025 data-nosnippet>1025</a> })
+<a href=#1026 id=1026 data-nosnippet>1026</a>}
+<a href=#1027 id=1027 data-nosnippet>1027</a>
+<a href=#1028 id=1028 data-nosnippet>1028</a><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>get_parquet_stat_max_as_datum(
+<a href=#1029 id=1029 data-nosnippet>1029</a> primitive_type: <span class="kw-2">&</span>PrimitiveType,
+<a href=#1030 id=1030 data-nosnippet>1030</a> stats: <span class="kw-2">&</span>Statistics,
+<a href=#1031 id=1031 data-nosnippet>1031</a>) -> <span class="prelude-ty">Result</span><<span class="prelude-ty">Option</span><Datum>> {
+<a href=#1032 id=1032 data-nosnippet>1032</a> <span class="prelude-val">Ok</span>(<span class="kw">match </span>(primitive_type, stats) {
+<a href=#1033 id=1033 data-nosnippet>1033</a> (PrimitiveType::Boolean, Statistics::Boolean(stats)) => {
+<a href=#1034 id=1034 data-nosnippet>1034</a> stats.max_opt().map(|val| Datum::bool(<span class="kw-2">*</span>val))
+<a href=#1035 id=1035 data-nosnippet>1035</a> }
+<a href=#1036 id=1036 data-nosnippet>1036</a> (PrimitiveType::Int, Statistics::Int32(stats)) => {
+<a href=#1037 id=1037 data-nosnippet>1037</a> stats.max_opt().map(|val| Datum::int(<span class="kw-2">*</span>val))
+<a href=#1038 id=1038 data-nosnippet>1038</a> }
+<a href=#1039 id=1039 data-nosnippet>1039</a> (PrimitiveType::Date, Statistics::Int32(stats)) => {
+<a href=#1040 id=1040 data-nosnippet>1040</a> stats.max_opt().map(|val| Datum::date(<span class="kw-2">*</span>val))
+<a href=#1041 id=1041 data-nosnippet>1041</a> }
+<a href=#1042 id=1042 data-nosnippet>1042</a> (PrimitiveType::Long, Statistics::Int64(stats)) => {
+<a href=#1043 id=1043 data-nosnippet>1043</a> stats.max_opt().map(|val| Datum::long(<span class="kw-2">*</span>val))
+<a href=#1044 id=1044 data-nosnippet>1044</a> }
+<a href=#1045 id=1045 data-nosnippet>1045</a> (PrimitiveType::Time, Statistics::Int64(stats)) => {
+<a href=#1046 id=1046 data-nosnippet>1046</a> <span class="kw">let </span><span class="prelude-val">Some</span>(val) = stats.max_opt() <span class="kw">else </span>{
+<a href=#1047 id=1047 data-nosnippet>1047</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#1048 id=1048 data-nosnippet>1048</a> };
+<a href=#1049 id=1049 data-nosnippet>1049</a>
+<a href=#1050 id=1050 data-nosnippet>1050</a> <span class="prelude-val">Some</span>(Datum::time_micros(<span class="kw-2">*</span>val)<span class="question-mark">?</span>)
+<a href=#1051 id=1051 data-nosnippet>1051</a> }
+<a href=#1052 id=1052 data-nosnippet>1052</a> (PrimitiveType::Timestamp, Statistics::Int64(stats)) => {
+<a href=#1053 id=1053 data-nosnippet>1053</a> stats.max_opt().map(|val| Datum::timestamp_micros(<span class="kw-2">*</span>val))
<a href=#1054 id=1054 data-nosnippet>1054</a> }
-<a href=#1055 id=1055 data-nosnippet>1055</a> (
-<a href=#1056 id=1056 data-nosnippet>1056</a> PrimitiveType::Decimal {
-<a href=#1057 id=1057 data-nosnippet>1057</a> precision: <span class="kw">_</span>,
-<a href=#1058 id=1058 data-nosnippet>1058</a> scale: <span class="kw">_</span>,
-<a href=#1059 id=1059 data-nosnippet>1059</a> },
-<a href=#1060 id=1060 data-nosnippet>1060</a> Statistics::FixedLenByteArray(stats),
-<a href=#1061 id=1061 data-nosnippet>1061</a> ) => {
-<a href=#1062 id=1062 data-nosnippet>1062</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.max_bytes_opt() <span class="kw">else </span>{
-<a href=#1063 id=1063 data-nosnippet>1063</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#1064 id=1064 data-nosnippet>1064</a> };
-<a href=#1065 id=1065 data-nosnippet>1065</a> <span class="prelude-val">Some</span>(Datum::new(
-<a href=#1066 id=1066 data-nosnippet>1066</a> primitive_type.clone(),
-<a href=#1067 id=1067 data-nosnippet>1067</a> PrimitiveLiteral::Int128(
-<a href=#1068 id=1068 data-nosnippet>1068</a> i128_from_be_bytes(bytes)
-<a href=#1069 id=1069 data-nosnippet>1069</a> .ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Can't convert bytes to i128: {bytes:?}"</span>))<span class="question-mark">?</span>,
-<a href=#1070 id=1070 data-nosnippet>1070</a> ),
-<a href=#1071 id=1071 data-nosnippet>1071</a> ))
-<a href=#1072 id=1072 data-nosnippet>1072</a> }
-<a href=#1073 id=1073 data-nosnippet>1073</a> (
-<a href=#1074 id=1074 data-nosnippet>1074</a> PrimitiveType::Decimal {
-<a href=#1075 id=1075 data-nosnippet>1075</a> precision: <span class="kw">_</span>,
-<a href=#1076 id=1076 data-nosnippet>1076</a> scale: <span class="kw">_</span>,
-<a href=#1077 id=1077 data-nosnippet>1077</a> },
-<a href=#1078 id=1078 data-nosnippet>1078</a> Statistics::Int32(stats),
-<a href=#1079 id=1079 data-nosnippet>1079</a> ) => stats.max_opt().map(|val| {
-<a href=#1080 id=1080 data-nosnippet>1080</a> Datum::new(
-<a href=#1081 id=1081 data-nosnippet>1081</a> primitive_type.clone(),
-<a href=#1082 id=1082 data-nosnippet>1082</a> PrimitiveLiteral::Int128(i128::from(<span class="kw-2">*</span>val)),
-<a href=#1083 id=1083 data-nosnippet>1083</a> )
-<a href=#1084 id=1084 data-nosnippet>1084</a> }),
-<a href=#1085 id=1085 data-nosnippet>1085</a>
-<a href=#1086 id=1086 data-nosnippet>1086</a> (
-<a href=#1087 id=1087 data-nosnippet>1087</a> PrimitiveType::Decimal {
-<a href=#1088 id=1088 data-nosnippet>1088</a> precision: <span class="kw">_</span>,
-<a href=#1089 id=1089 data-nosnippet>1089</a> scale: <span class="kw">_</span>,
-<a href=#1090 id=1090 data-nosnippet>1090</a> },
-<a href=#1091 id=1091 data-nosnippet>1091</a> Statistics::Int64(stats),
-<a href=#1092 id=1092 data-nosnippet>1092</a> ) => stats.max_opt().map(|val| {
-<a href=#1093 id=1093 data-nosnippet>1093</a> Datum::new(
-<a href=#1094 id=1094 data-nosnippet>1094</a> primitive_type.clone(),
-<a href=#1095 id=1095 data-nosnippet>1095</a> PrimitiveLiteral::Int128(i128::from(<span class="kw-2">*</span>val)),
-<a href=#1096 id=1096 data-nosnippet>1096</a> )
-<a href=#1097 id=1097 data-nosnippet>1097</a> }),
-<a href=#1098 id=1098 data-nosnippet>1098</a> (PrimitiveType::Uuid, Statistics::FixedLenByteArray(stats)) => {
-<a href=#1099 id=1099 data-nosnippet>1099</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.max_bytes_opt() <span class="kw">else </span>{
-<a href=#1100 id=1100 data-nosnippet>1100</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#1101 id=1101 data-nosnippet>1101</a> };
-<a href=#1102 id=1102 data-nosnippet>1102</a> <span class="kw">if </span>bytes.len() != <span class="number">16 </span>{
-<a href=#1103 id=1103 data-nosnippet>1103</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#1104 id=1104 data-nosnippet>1104</a> ErrorKind::Unexpected,
-<a href=#1105 id=1105 data-nosnippet>1105</a> <span class="string">"Invalid length of uuid bytes."</span>,
-<a href=#1106 id=1106 data-nosnippet>1106</a> ));
-<a href=#1107 id=1107 data-nosnippet>1107</a> }
-<a href=#1108 id=1108 data-nosnippet>1108</a> <span class="prelude-val">Some</span>(Datum::uuid(Uuid::from_bytes(
-<a href=#1109 id=1109 data-nosnippet>1109</a> bytes[..<span class="number">16</span>].try_into().unwrap(),
-<a href=#1110 id=1110 data-nosnippet>1110</a> )))
-<a href=#1111 id=1111 data-nosnippet>1111</a> }
-<a href=#1112 id=1112 data-nosnippet>1112</a> (PrimitiveType::Fixed(len), Statistics::FixedLenByteArray(stat)) => {
-<a href=#1113 id=1113 data-nosnippet>1113</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stat.max_bytes_opt() <span class="kw">else </span>{
-<a href=#1114 id=1114 data-nosnippet>1114</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#1115 id=1115 data-nosnippet>1115</a> };
-<a href=#1116 id=1116 data-nosnippet>1116</a> <span class="kw">if </span>bytes.len() != <span class="kw-2">*</span>len <span class="kw">as </span>usize {
-<a href=#1117 id=1117 data-nosnippet>1117</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#1118 id=1118 data-nosnippet>1118</a> ErrorKind::Unexpected,
-<a href=#1119 id=1119 data-nosnippet>1119</a> <span class="string">"Invalid length of fixed bytes."</span>,
-<a href=#1120 id=1120 data-nosnippet>1120</a> ));
-<a href=#1121 id=1121 data-nosnippet>1121</a> }
-<a href=#1122 id=1122 data-nosnippet>1122</a> <span class="prelude-val">Some</span>(Datum::fixed(bytes.to_vec()))
-<a href=#1123 id=1123 data-nosnippet>1123</a> }
-<a href=#1124 id=1124 data-nosnippet>1124</a> (PrimitiveType::Binary, Statistics::ByteArray(stat)) => {
-<a href=#1125 id=1125 data-nosnippet>1125</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(stat
-<a href=#1126 id=1126 data-nosnippet>1126</a> .max_bytes_opt()
-<a href=#1127 id=1127 data-nosnippet>1127</a> .map(|bytes| Datum::binary(bytes.to_vec())));
-<a href=#1128 id=1128 data-nosnippet>1128</a> }
-<a href=#1129 id=1129 data-nosnippet>1129</a> <span class="kw">_ </span>=> {
-<a href=#1130 id=1130 data-nosnippet>1130</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
-<a href=#1131 id=1131 data-nosnippet>1131</a> }
-<a href=#1132 id=1132 data-nosnippet>1132</a> })
-<a href=#1133 id=1133 data-nosnippet>1133</a>}
-<a href=#1134 id=1134 data-nosnippet>1134</a>
-<a href=#1135 id=1135 data-nosnippet>1135</a><span class="kw">impl </span>TryFrom<<span class="kw-2">&</span>ArrowSchema> <span class="kw">for </span>Schema {
-<a href=#1136 id=1136 data-nosnippet>1136</a> <span class="kw">type </span>Error = Error;
-<a href=#1137 id=1137 data-nosnippet>1137</a>
-<a href=#1138 id=1138 data-nosnippet>1138</a> <span class="kw">fn </span>try_from(schema: <span class="kw-2">&</span>ArrowSchema) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
-<a href=#1139 id=1139 data-nosnippet>1139</a> arrow_schema_to_schema(schema)
-<a href=#1140 id=1140 data-nosnippet>1140</a> }
-<a href=#1141 id=1141 data-nosnippet>1141</a>}
-<a href=#1142 id=1142 data-nosnippet>1142</a>
-<a href=#1143 id=1143 data-nosnippet>1143</a><span class="kw">impl </span>TryFrom<<span class="kw-2">&</span>Schema> <span class="kw">for </span>ArrowSchema {
-<a href=#1144 id=1144 data-nosnippet>1144</a> <span class="kw">type </span>Error = Error;
-<a href=#1145 id=1145 data-nosnippet>1145</a>
-<a href=#1146 id=1146 data-nosnippet>1146</a> <span class="kw">fn </span>try_from(schema: <span class="kw-2">&</span>Schema) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
-<a href=#1147 id=1147 data-nosnippet>1147</a> schema_to_arrow_schema(schema)
-<a href=#1148 id=1148 data-nosnippet>1148</a> }
-<a href=#1149 id=1149 data-nosnippet>1149</a>}
-<a href=#1150 id=1150 data-nosnippet>1150</a>
-<a href=#1151 id=1151 data-nosnippet>1151</a><span class="doccomment">/// Converts a Datum (Iceberg type + primitive literal) to its corresponding Arrow DataType
-<a href=#1152 id=1152 data-nosnippet>1152</a>/// with Run-End Encoding (REE).
-<a href=#1153 id=1153 data-nosnippet>1153</a>///
-<a href=#1154 id=1154 data-nosnippet>1154</a>/// This function is used for constant fields in record batches, where all values are the same.
-<a href=#1155 id=1155 data-nosnippet>1155</a>/// Run-End Encoding provides efficient storage for such constant columns.
-<a href=#1156 id=1156 data-nosnippet>1156</a>///
-<a href=#1157 id=1157 data-nosnippet>1157</a>/// # Arguments
-<a href=#1158 id=1158 data-nosnippet>1158</a>/// * `datum` - The Datum to convert, which contains both type and value information
-<a href=#1159 id=1159 data-nosnippet>1159</a>///
-<a href=#1160 id=1160 data-nosnippet>1160</a>/// # Returns
-<a href=#1161 id=1161 data-nosnippet>1161</a>/// Arrow DataType with Run-End Encoding applied
-<a href=#1162 id=1162 data-nosnippet>1162</a>///
-<a href=#1163 id=1163 data-nosnippet>1163</a>/// # Example
-<a href=#1164 id=1164 data-nosnippet>1164</a>/// ```
-<a href=#1165 id=1165 data-nosnippet>1165</a>/// use iceberg::arrow::datum_to_arrow_type_with_ree;
-<a href=#1166 id=1166 data-nosnippet>1166</a>/// use iceberg::spec::Datum;
-<a href=#1167 id=1167 data-nosnippet>1167</a>///
-<a href=#1168 id=1168 data-nosnippet>1168</a>/// let datum = Datum::string("test_file.parquet");
-<a href=#1169 id=1169 data-nosnippet>1169</a>/// let ree_type = datum_to_arrow_type_with_ree(&datum);
-<a href=#1170 id=1170 data-nosnippet>1170</a>/// // Returns: RunEndEncoded(Int32, Utf8)
-<a href=#1171 id=1171 data-nosnippet>1171</a>/// ```
-<a href=#1172 id=1172 data-nosnippet>1172</a></span><span class="kw">pub fn </span>datum_to_arrow_type_with_ree(datum: <span class="kw-2">&</span>Datum) -> DataType {
-<a href=#1173 id=1173 data-nosnippet>1173</a> primitive_type_to_arrow_type_with_ree(datum.data_type())
-<a href=#1174 id=1174 data-nosnippet>1174</a>}
-<a href=#1175 id=1175 data-nosnippet>1175</a>
-<a href=#1176 id=1176 data-nosnippet>1176</a><span class="doccomment">/// Returns the run-end-encoded Arrow type used to materialize a per-file constant
-<a href=#1177 id=1177 data-nosnippet>1177</a>/// column of the given Iceberg primitive type. Shared by both the value and the
-<a href=#1178 id=1178 data-nosnippet>1178</a>/// all-null constant paths so a column keeps one Arrow type across files.
-<a href=#1179 id=1179 data-nosnippet>1179</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>primitive_type_to_arrow_type_with_ree(primitive_type: <span class="kw-2">&</span>PrimitiveType) -> DataType {
-<a href=#1180 id=1180 data-nosnippet>1180</a> <span class="comment">// Helper to create REE type with the given values type.
-<a href=#1181 id=1181 data-nosnippet>1181</a> // Note: values field is nullable as Arrow expects this when building the
-<a href=#1182 id=1182 data-nosnippet>1182</a> // final Arrow schema with `RunArray::try_new`.
-<a href=#1183 id=1183 data-nosnippet>1183</a> </span><span class="kw">let </span>make_ree = |values_type: DataType| -> DataType {
-<a href=#1184 id=1184 data-nosnippet>1184</a> <span class="kw">let </span>run_ends_field = Arc::new(Field::new(<span class="string">"run_ends"</span>, DataType::Int32, <span class="bool-val">false</span>));
-<a href=#1185 id=1185 data-nosnippet>1185</a> <span class="kw">let </span>values_field = Arc::new(Field::new(<span class="string">"values"</span>, values_type, <span class="bool-val">true</span>));
-<a href=#1186 id=1186 data-nosnippet>1186</a> DataType::RunEndEncoded(run_ends_field, values_field)
-<a href=#1187 id=1187 data-nosnippet>1187</a> };
+<a href=#1055 id=1055 data-nosnippet>1055</a> (PrimitiveType::Timestamptz, Statistics::Int64(stats)) => {
+<a href=#1056 id=1056 data-nosnippet>1056</a> stats.max_opt().map(|val| Datum::timestamptz_micros(<span class="kw-2">*</span>val))
+<a href=#1057 id=1057 data-nosnippet>1057</a> }
+<a href=#1058 id=1058 data-nosnippet>1058</a> (PrimitiveType::TimestampNs, Statistics::Int64(stats)) => {
+<a href=#1059 id=1059 data-nosnippet>1059</a> stats.max_opt().map(|val| Datum::timestamp_nanos(<span class="kw-2">*</span>val))
+<a href=#1060 id=1060 data-nosnippet>1060</a> }
+<a href=#1061 id=1061 data-nosnippet>1061</a> (PrimitiveType::TimestamptzNs, Statistics::Int64(stats)) => {
+<a href=#1062 id=1062 data-nosnippet>1062</a> stats.max_opt().map(|val| Datum::timestamptz_nanos(<span class="kw-2">*</span>val))
+<a href=#1063 id=1063 data-nosnippet>1063</a> }
+<a href=#1064 id=1064 data-nosnippet>1064</a> (PrimitiveType::Float, Statistics::Float(stats)) => {
+<a href=#1065 id=1065 data-nosnippet>1065</a> stats.max_opt().map(|val| Datum::float(<span class="kw-2">*</span>val))
+<a href=#1066 id=1066 data-nosnippet>1066</a> }
+<a href=#1067 id=1067 data-nosnippet>1067</a> (PrimitiveType::Double, Statistics::Double(stats)) => {
+<a href=#1068 id=1068 data-nosnippet>1068</a> stats.max_opt().map(|val| Datum::double(<span class="kw-2">*</span>val))
+<a href=#1069 id=1069 data-nosnippet>1069</a> }
+<a href=#1070 id=1070 data-nosnippet>1070</a> (PrimitiveType::String, Statistics::ByteArray(stats)) => {
+<a href=#1071 id=1071 data-nosnippet>1071</a> <span class="kw">let </span><span class="prelude-val">Some</span>(val) = stats.max_opt() <span class="kw">else </span>{
+<a href=#1072 id=1072 data-nosnippet>1072</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#1073 id=1073 data-nosnippet>1073</a> };
+<a href=#1074 id=1074 data-nosnippet>1074</a>
+<a href=#1075 id=1075 data-nosnippet>1075</a> <span class="prelude-val">Some</span>(Datum::string(val.as_utf8()<span class="question-mark">?</span>))
+<a href=#1076 id=1076 data-nosnippet>1076</a> }
+<a href=#1077 id=1077 data-nosnippet>1077</a> (
+<a href=#1078 id=1078 data-nosnippet>1078</a> PrimitiveType::Decimal {
+<a href=#1079 id=1079 data-nosnippet>1079</a> precision: <span class="kw">_</span>,
+<a href=#1080 id=1080 data-nosnippet>1080</a> scale: <span class="kw">_</span>,
+<a href=#1081 id=1081 data-nosnippet>1081</a> },
+<a href=#1082 id=1082 data-nosnippet>1082</a> Statistics::ByteArray(stats),
+<a href=#1083 id=1083 data-nosnippet>1083</a> ) => {
+<a href=#1084 id=1084 data-nosnippet>1084</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.max_bytes_opt() <span class="kw">else </span>{
+<a href=#1085 id=1085 data-nosnippet>1085</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#1086 id=1086 data-nosnippet>1086</a> };
+<a href=#1087 id=1087 data-nosnippet>1087</a> <span class="prelude-val">Some</span>(Datum::new(
+<a href=#1088 id=1088 data-nosnippet>1088</a> primitive_type.clone(),
+<a href=#1089 id=1089 data-nosnippet>1089</a> PrimitiveLiteral::Int128(
+<a href=#1090 id=1090 data-nosnippet>1090</a> <span class="comment">// An empty bound carries no value; reject it rather than
+<a href=#1091 id=1091 data-nosnippet>1091</a> // decode it as zero, which could prune matching row groups.
+<a href=#1092 id=1092 data-nosnippet>1092</a> </span>i128_from_be_bytes(bytes)
+<a href=#1093 id=1093 data-nosnippet>1093</a> .filter(|<span class="kw">_</span>| !bytes.is_empty())
+<a href=#1094 id=1094 data-nosnippet>1094</a> .ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Can't convert bytes to i128: {bytes:?}"</span>))<span class="question-mark">?</span>,
+<a href=#1095 id=1095 data-nosnippet>1095</a> ),
+<a href=#1096 id=1096 data-nosnippet>1096</a> ))
+<a href=#1097 id=1097 data-nosnippet>1097</a> }
+<a href=#1098 id=1098 data-nosnippet>1098</a> (
+<a href=#1099 id=1099 data-nosnippet>1099</a> PrimitiveType::Decimal {
+<a href=#1100 id=1100 data-nosnippet>1100</a> precision: <span class="kw">_</span>,
+<a href=#1101 id=1101 data-nosnippet>1101</a> scale: <span class="kw">_</span>,
+<a href=#1102 id=1102 data-nosnippet>1102</a> },
+<a href=#1103 id=1103 data-nosnippet>1103</a> Statistics::FixedLenByteArray(stats),
+<a href=#1104 id=1104 data-nosnippet>1104</a> ) => {
+<a href=#1105 id=1105 data-nosnippet>1105</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.max_bytes_opt() <span class="kw">else </span>{
+<a href=#1106 id=1106 data-nosnippet>1106</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#1107 id=1107 data-nosnippet>1107</a> };
+<a href=#1108 id=1108 data-nosnippet>1108</a> <span class="prelude-val">Some</span>(Datum::new(
+<a href=#1109 id=1109 data-nosnippet>1109</a> primitive_type.clone(),
+<a href=#1110 id=1110 data-nosnippet>1110</a> PrimitiveLiteral::Int128(
+<a href=#1111 id=1111 data-nosnippet>1111</a> i128_from_be_bytes(bytes)
+<a href=#1112 id=1112 data-nosnippet>1112</a> .ok_or_else(|| <span class="macro">invalid_data!</span>(<span class="string">"Can't convert bytes to i128: {bytes:?}"</span>))<span class="question-mark">?</span>,
+<a href=#1113 id=1113 data-nosnippet>1113</a> ),
+<a href=#1114 id=1114 data-nosnippet>1114</a> ))
+<a href=#1115 id=1115 data-nosnippet>1115</a> }
+<a href=#1116 id=1116 data-nosnippet>1116</a> (
+<a href=#1117 id=1117 data-nosnippet>1117</a> PrimitiveType::Decimal {
+<a href=#1118 id=1118 data-nosnippet>1118</a> precision: <span class="kw">_</span>,
+<a href=#1119 id=1119 data-nosnippet>1119</a> scale: <span class="kw">_</span>,
+<a href=#1120 id=1120 data-nosnippet>1120</a> },
+<a href=#1121 id=1121 data-nosnippet>1121</a> Statistics::Int32(stats),
+<a href=#1122 id=1122 data-nosnippet>1122</a> ) => stats.max_opt().map(|val| {
+<a href=#1123 id=1123 data-nosnippet>1123</a> Datum::new(
+<a href=#1124 id=1124 data-nosnippet>1124</a> primitive_type.clone(),
+<a href=#1125 id=1125 data-nosnippet>1125</a> PrimitiveLiteral::Int128(i128::from(<span class="kw-2">*</span>val)),
+<a href=#1126 id=1126 data-nosnippet>1126</a> )
+<a href=#1127 id=1127 data-nosnippet>1127</a> }),
+<a href=#1128 id=1128 data-nosnippet>1128</a>
+<a href=#1129 id=1129 data-nosnippet>1129</a> (
+<a href=#1130 id=1130 data-nosnippet>1130</a> PrimitiveType::Decimal {
+<a href=#1131 id=1131 data-nosnippet>1131</a> precision: <span class="kw">_</span>,
+<a href=#1132 id=1132 data-nosnippet>1132</a> scale: <span class="kw">_</span>,
+<a href=#1133 id=1133 data-nosnippet>1133</a> },
+<a href=#1134 id=1134 data-nosnippet>1134</a> Statistics::Int64(stats),
+<a href=#1135 id=1135 data-nosnippet>1135</a> ) => stats.max_opt().map(|val| {
+<a href=#1136 id=1136 data-nosnippet>1136</a> Datum::new(
+<a href=#1137 id=1137 data-nosnippet>1137</a> primitive_type.clone(),
+<a href=#1138 id=1138 data-nosnippet>1138</a> PrimitiveLiteral::Int128(i128::from(<span class="kw-2">*</span>val)),
+<a href=#1139 id=1139 data-nosnippet>1139</a> )
+<a href=#1140 id=1140 data-nosnippet>1140</a> }),
+<a href=#1141 id=1141 data-nosnippet>1141</a> (PrimitiveType::Uuid, Statistics::FixedLenByteArray(stats)) => {
+<a href=#1142 id=1142 data-nosnippet>1142</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stats.max_bytes_opt() <span class="kw">else </span>{
+<a href=#1143 id=1143 data-nosnippet>1143</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#1144 id=1144 data-nosnippet>1144</a> };
+<a href=#1145 id=1145 data-nosnippet>1145</a> <span class="kw">if </span>bytes.len() != <span class="number">16 </span>{
+<a href=#1146 id=1146 data-nosnippet>1146</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#1147 id=1147 data-nosnippet>1147</a> ErrorKind::Unexpected,
+<a href=#1148 id=1148 data-nosnippet>1148</a> <span class="string">"Invalid length of uuid bytes."</span>,
+<a href=#1149 id=1149 data-nosnippet>1149</a> ));
+<a href=#1150 id=1150 data-nosnippet>1150</a> }
+<a href=#1151 id=1151 data-nosnippet>1151</a> <span class="prelude-val">Some</span>(Datum::uuid(Uuid::from_bytes(
+<a href=#1152 id=1152 data-nosnippet>1152</a> bytes[..<span class="number">16</span>].try_into().unwrap(),
+<a href=#1153 id=1153 data-nosnippet>1153</a> )))
+<a href=#1154 id=1154 data-nosnippet>1154</a> }
+<a href=#1155 id=1155 data-nosnippet>1155</a> (PrimitiveType::Fixed(len), Statistics::FixedLenByteArray(stat)) => {
+<a href=#1156 id=1156 data-nosnippet>1156</a> <span class="kw">let </span><span class="prelude-val">Some</span>(bytes) = stat.max_bytes_opt() <span class="kw">else </span>{
+<a href=#1157 id=1157 data-nosnippet>1157</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#1158 id=1158 data-nosnippet>1158</a> };
+<a href=#1159 id=1159 data-nosnippet>1159</a> <span class="kw">if </span>bytes.len() != <span class="kw-2">*</span>len <span class="kw">as </span>usize {
+<a href=#1160 id=1160 data-nosnippet>1160</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#1161 id=1161 data-nosnippet>1161</a> ErrorKind::Unexpected,
+<a href=#1162 id=1162 data-nosnippet>1162</a> <span class="string">"Invalid length of fixed bytes."</span>,
+<a href=#1163 id=1163 data-nosnippet>1163</a> ));
+<a href=#1164 id=1164 data-nosnippet>1164</a> }
+<a href=#1165 id=1165 data-nosnippet>1165</a> <span class="prelude-val">Some</span>(Datum::fixed(bytes.to_vec()))
+<a href=#1166 id=1166 data-nosnippet>1166</a> }
+<a href=#1167 id=1167 data-nosnippet>1167</a> (PrimitiveType::Binary, Statistics::ByteArray(stat)) => {
+<a href=#1168 id=1168 data-nosnippet>1168</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(stat
+<a href=#1169 id=1169 data-nosnippet>1169</a> .max_bytes_opt()
+<a href=#1170 id=1170 data-nosnippet>1170</a> .map(|bytes| Datum::binary(bytes.to_vec())));
+<a href=#1171 id=1171 data-nosnippet>1171</a> }
+<a href=#1172 id=1172 data-nosnippet>1172</a> <span class="kw">_ </span>=> {
+<a href=#1173 id=1173 data-nosnippet>1173</a> <span class="kw">return </span><span class="prelude-val">Ok</span>(<span class="prelude-val">None</span>);
+<a href=#1174 id=1174 data-nosnippet>1174</a> }
+<a href=#1175 id=1175 data-nosnippet>1175</a> })
+<a href=#1176 id=1176 data-nosnippet>1176</a>}
+<a href=#1177 id=1177 data-nosnippet>1177</a>
+<a href=#1178 id=1178 data-nosnippet>1178</a><span class="kw">impl </span>TryFrom<<span class="kw-2">&</span>ArrowSchema> <span class="kw">for </span>Schema {
+<a href=#1179 id=1179 data-nosnippet>1179</a> <span class="kw">type </span>Error = Error;
+<a href=#1180 id=1180 data-nosnippet>1180</a>
+<a href=#1181 id=1181 data-nosnippet>1181</a> <span class="kw">fn </span>try_from(schema: <span class="kw-2">&</span>ArrowSchema) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
+<a href=#1182 id=1182 data-nosnippet>1182</a> arrow_schema_to_schema(schema)
+<a href=#1183 id=1183 data-nosnippet>1183</a> }
+<a href=#1184 id=1184 data-nosnippet>1184</a>}
+<a href=#1185 id=1185 data-nosnippet>1185</a>
+<a href=#1186 id=1186 data-nosnippet>1186</a><span class="kw">impl </span>TryFrom<<span class="kw-2">&</span>Schema> <span class="kw">for </span>ArrowSchema {
+<a href=#1187 id=1187 data-nosnippet>1187</a> <span class="kw">type </span>Error = Error;
<a href=#1188 id=1188 data-nosnippet>1188</a>
-<a href=#1189 id=1189 data-nosnippet>1189</a> <span class="kw">match </span>primitive_type {
-<a href=#1190 id=1190 data-nosnippet>1190</a> PrimitiveType::Unknown => make_ree(DataType::Null),
-<a href=#1191 id=1191 data-nosnippet>1191</a> PrimitiveType::Boolean => make_ree(DataType::Boolean),
-<a href=#1192 id=1192 data-nosnippet>1192</a> PrimitiveType::Int => make_ree(DataType::Int32),
-<a href=#1193 id=1193 data-nosnippet>1193</a> PrimitiveType::Long => make_ree(DataType::Int64),
-<a href=#1194 id=1194 data-nosnippet>1194</a> PrimitiveType::Float => make_ree(DataType::Float32),
-<a href=#1195 id=1195 data-nosnippet>1195</a> PrimitiveType::Double => make_ree(DataType::Float64),
-<a href=#1196 id=1196 data-nosnippet>1196</a> PrimitiveType::Date => make_ree(DataType::Date32),
-<a href=#1197 id=1197 data-nosnippet>1197</a> PrimitiveType::Time => make_ree(DataType::Int64),
-<a href=#1198 id=1198 data-nosnippet>1198</a> PrimitiveType::Timestamp => make_ree(DataType::Int64),
-<a href=#1199 id=1199 data-nosnippet>1199</a> PrimitiveType::Timestamptz => make_ree(DataType::Int64),
-<a href=#1200 id=1200 data-nosnippet>1200</a> PrimitiveType::TimestampNs => make_ree(DataType::Int64),
-<a href=#1201 id=1201 data-nosnippet>1201</a> PrimitiveType::TimestamptzNs => make_ree(DataType::Int64),
-<a href=#1202 id=1202 data-nosnippet>1202</a> PrimitiveType::String => make_ree(DataType::Utf8),
-<a href=#1203 id=1203 data-nosnippet>1203</a> PrimitiveType::Uuid => make_ree(DataType::Binary),
-<a href=#1204 id=1204 data-nosnippet>1204</a> PrimitiveType::Fixed(<span class="kw">_</span>) => make_ree(DataType::Binary),
-<a href=#1205 id=1205 data-nosnippet>1205</a> PrimitiveType::Binary => make_ree(DataType::Binary),
-<a href=#1206 id=1206 data-nosnippet>1206</a> PrimitiveType::Decimal { precision, scale } => {
-<a href=#1207 id=1207 data-nosnippet>1207</a> make_ree(DataType::Decimal128(<span class="kw-2">*</span>precision <span class="kw">as </span>u8, <span class="kw-2">*</span>scale <span class="kw">as </span>i8))
-<a href=#1208 id=1208 data-nosnippet>1208</a> }
-<a href=#1209 id=1209 data-nosnippet>1209</a> }
-<a href=#1210 id=1210 data-nosnippet>1210</a>}
-<a href=#1211 id=1211 data-nosnippet>1211</a>
-<a href=#1212 id=1212 data-nosnippet>1212</a><span class="doccomment">/// A visitor that strips metadata from an Arrow schema.
-<a href=#1213 id=1213 data-nosnippet>1213</a>///
-<a href=#1214 id=1214 data-nosnippet>1214</a>/// This visitor recursively removes all metadata from fields at every level of the schema,
-<a href=#1215 id=1215 data-nosnippet>1215</a>/// including nested struct, list, and map fields. This is useful for schema comparison
-<a href=#1216 id=1216 data-nosnippet>1216</a>/// where metadata differences should be ignored.
-<a href=#1217 id=1217 data-nosnippet>1217</a></span><span class="kw">struct </span>MetadataStripVisitor {
-<a href=#1218 id=1218 data-nosnippet>1218</a> <span class="doccomment">/// Fields whose types are still being visited, innermost last
-<a href=#1219 id=1219 data-nosnippet>1219</a> </span>pending_fields: Vec<PendingField>,
-<a href=#1220 id=1220 data-nosnippet>1220</a>}
-<a href=#1221 id=1221 data-nosnippet>1221</a>
-<a href=#1222 id=1222 data-nosnippet>1222</a><span class="doccomment">/// What `MetadataStripVisitor` keeps of a field until its type is visited
-<a href=#1223 id=1223 data-nosnippet>1223</a></span><span class="kw">struct </span>PendingField {
-<a href=#1224 id=1224 data-nosnippet>1224</a> name: String,
-<a href=#1225 id=1225 data-nosnippet>1225</a> nullable: bool,
-<a href=#1226 id=1226 data-nosnippet>1226</a>}
-<a href=#1227 id=1227 data-nosnippet>1227</a>
-<a href=#1228 id=1228 data-nosnippet>1228</a><span class="kw">impl </span>MetadataStripVisitor {
-<a href=#1229 id=1229 data-nosnippet>1229</a> <span class="kw">fn </span>new() -> <span class="self">Self </span>{
-<a href=#1230 id=1230 data-nosnippet>1230</a> <span class="self">Self </span>{
-<a href=#1231 id=1231 data-nosnippet>1231</a> pending_fields: Vec::new(),
-<a href=#1232 id=1232 data-nosnippet>1232</a> }
-<a href=#1233 id=1233 data-nosnippet>1233</a> }
-<a href=#1234 id=1234 data-nosnippet>1234</a>
-<a href=#1235 id=1235 data-nosnippet>1235</a> <span class="doccomment">/// Records a field whose type is about to be visited.
-<a href=#1236 id=1236 data-nosnippet>1236</a> </span><span class="kw">fn </span>start_field(<span class="kw-2">&mut </span><span class="self">self</span>, name: <span class="kw-2">&</span>str, nullable: bool) -> <span class="prelude-ty">Result</span><()> {
-<a href=#1237 id=1237 data-nosnippet>1237</a> <span class="self">self</span>.pending_fields.push(PendingField {
-<a href=#1238 id=1238 data-nosnippet>1238</a> name: name.to_string(),
-<a href=#1239 id=1239 data-nosnippet>1239</a> nullable,
-<a href=#1240 id=1240 data-nosnippet>1240</a> });
-<a href=#1241 id=1241 data-nosnippet>1241</a> <span class="prelude-val">Ok</span>(())
-<a href=#1242 id=1242 data-nosnippet>1242</a> }
-<a href=#1243 id=1243 data-nosnippet>1243</a>
-<a href=#1244 id=1244 data-nosnippet>1244</a> <span class="doccomment">/// Builds the innermost pending field with `data_type` and no metadata.
-<a href=#1245 id=1245 data-nosnippet>1245</a> /// `kind` names the type in the error for an unbalanced stack.
-<a href=#1246 id=1246 data-nosnippet>1246</a> </span><span class="kw">fn </span>finish_field(<span class="kw-2">&mut </span><span class="self">self</span>, data_type: DataType, kind: <span class="kw-2">&</span>str) -> <span class="prelude-ty">Result</span><Field> {
-<a href=#1247 id=1247 data-nosnippet>1247</a> <span class="kw">let </span>PendingField { name, nullable } = <span class="self">self</span>.pending_fields.pop().ok_or_else(|| {
-<a href=#1248 id=1248 data-nosnippet>1248</a> Error::new(
-<a href=#1249 id=1249 data-nosnippet>1249</a> ErrorKind::Unexpected,
-<a href=#1250 id=1250 data-nosnippet>1250</a> <span class="macro">format!</span>(<span class="string">"Field stack underflow in {kind}"</span>),
-<a href=#1251 id=1251 data-nosnippet>1251</a> )
-<a href=#1252 id=1252 data-nosnippet>1252</a> })<span class="question-mark">?</span>;
-<a href=#1253 id=1253 data-nosnippet>1253</a> <span class="prelude-val">Ok</span>(Field::new(name, data_type, nullable))
-<a href=#1254 id=1254 data-nosnippet>1254</a> }
-<a href=#1255 id=1255 data-nosnippet>1255</a>}
-<a href=#1256 id=1256 data-nosnippet>1256</a>
-<a href=#1257 id=1257 data-nosnippet>1257</a><span class="kw">impl </span>ArrowSchemaVisitor <span class="kw">for </span>MetadataStripVisitor {
-<a href=#1258 id=1258 data-nosnippet>1258</a> <span class="kw">type </span>T = Field;
-<a href=#1259 id=1259 data-nosnippet>1259</a> <span class="kw">type </span>U = ArrowSchema;
-<a href=#1260 id=1260 data-nosnippet>1260</a>
-<a href=#1261 id=1261 data-nosnippet>1261</a> <span class="kw">fn </span>before_field(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><()> {
-<a href=#1262 id=1262 data-nosnippet>1262</a> <span class="self">self</span>.start_field(field.name(), field.is_nullable())
-<a href=#1263 id=1263 data-nosnippet>1263</a> }
+<a href=#1189 id=1189 data-nosnippet>1189</a> <span class="kw">fn </span>try_from(schema: <span class="kw-2">&</span>Schema) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>> {
+<a href=#1190 id=1190 data-nosnippet>1190</a> schema_to_arrow_schema(schema)
+<a href=#1191 id=1191 data-nosnippet>1191</a> }
+<a href=#1192 id=1192 data-nosnippet>1192</a>}
+<a href=#1193 id=1193 data-nosnippet>1193</a>
+<a href=#1194 id=1194 data-nosnippet>1194</a><span class="doccomment">/// Converts a Datum (Iceberg type + primitive literal) to its corresponding Arrow DataType
+<a href=#1195 id=1195 data-nosnippet>1195</a>/// with Run-End Encoding (REE).
+<a href=#1196 id=1196 data-nosnippet>1196</a>///
+<a href=#1197 id=1197 data-nosnippet>1197</a>/// This function is used for constant fields in record batches, where all values are the same.
+<a href=#1198 id=1198 data-nosnippet>1198</a>/// Run-End Encoding provides efficient storage for such constant columns.
+<a href=#1199 id=1199 data-nosnippet>1199</a>///
+<a href=#1200 id=1200 data-nosnippet>1200</a>/// # Arguments
+<a href=#1201 id=1201 data-nosnippet>1201</a>/// * `datum` - The Datum to convert, which contains both type and value information
+<a href=#1202 id=1202 data-nosnippet>1202</a>///
+<a href=#1203 id=1203 data-nosnippet>1203</a>/// # Returns
+<a href=#1204 id=1204 data-nosnippet>1204</a>/// Arrow DataType with Run-End Encoding applied
+<a href=#1205 id=1205 data-nosnippet>1205</a>///
+<a href=#1206 id=1206 data-nosnippet>1206</a>/// # Example
+<a href=#1207 id=1207 data-nosnippet>1207</a>/// ```
+<a href=#1208 id=1208 data-nosnippet>1208</a>/// use iceberg::arrow::datum_to_arrow_type_with_ree;
+<a href=#1209 id=1209 data-nosnippet>1209</a>/// use iceberg::spec::Datum;
+<a href=#1210 id=1210 data-nosnippet>1210</a>///
+<a href=#1211 id=1211 data-nosnippet>1211</a>/// let datum = Datum::string("test_file.parquet");
+<a href=#1212 id=1212 data-nosnippet>1212</a>/// let ree_type = datum_to_arrow_type_with_ree(&datum);
+<a href=#1213 id=1213 data-nosnippet>1213</a>/// // Returns: RunEndEncoded(Int32, Utf8)
+<a href=#1214 id=1214 data-nosnippet>1214</a>/// ```
+<a href=#1215 id=1215 data-nosnippet>1215</a></span><span class="kw">pub fn </span>datum_to_arrow_type_with_ree(datum: <span class="kw-2">&</span>Datum) -> DataType {
+<a href=#1216 id=1216 data-nosnippet>1216</a> primitive_type_to_arrow_type_with_ree(datum.data_type())
+<a href=#1217 id=1217 data-nosnippet>1217</a>}
+<a href=#1218 id=1218 data-nosnippet>1218</a>
+<a href=#1219 id=1219 data-nosnippet>1219</a><span class="doccomment">/// Returns the run-end-encoded Arrow type used to materialize a per-file constant
+<a href=#1220 id=1220 data-nosnippet>1220</a>/// column of the given Iceberg primitive type. Shared by both the value and the
+<a href=#1221 id=1221 data-nosnippet>1221</a>/// all-null constant paths so a column keeps one Arrow type across files.
+<a href=#1222 id=1222 data-nosnippet>1222</a></span><span class="kw">pub</span>(<span class="kw">crate</span>) <span class="kw">fn </span>primitive_type_to_arrow_type_with_ree(primitive_type: <span class="kw-2">&</span>PrimitiveType) -> DataType {
+<a href=#1223 id=1223 data-nosnippet>1223</a> <span class="comment">// Helper to create REE type with the given values type.
+<a href=#1224 id=1224 data-nosnippet>1224</a> // Note: values field is nullable as Arrow expects this when building the
+<a href=#1225 id=1225 data-nosnippet>1225</a> // final Arrow schema with `RunArray::try_new`.
+<a href=#1226 id=1226 data-nosnippet>1226</a> </span><span class="kw">let </span>make_ree = |values_type: DataType| -> DataType {
+<a href=#1227 id=1227 data-nosnippet>1227</a> <span class="kw">let </span>run_ends_field = Arc::new(Field::new(<span class="string">"run_ends"</span>, DataType::Int32, <span class="bool-val">false</span>));
+<a href=#1228 id=1228 data-nosnippet>1228</a> <span class="kw">let </span>values_field = Arc::new(Field::new(<span class="string">"values"</span>, values_type, <span class="bool-val">true</span>));
+<a href=#1229 id=1229 data-nosnippet>1229</a> DataType::RunEndEncoded(run_ends_field, values_field)
+<a href=#1230 id=1230 data-nosnippet>1230</a> };
+<a href=#1231 id=1231 data-nosnippet>1231</a>
+<a href=#1232 id=1232 data-nosnippet>1232</a> <span class="kw">match </span>primitive_type {
+<a href=#1233 id=1233 data-nosnippet>1233</a> PrimitiveType::Unknown => make_ree(DataType::Null),
+<a href=#1234 id=1234 data-nosnippet>1234</a> PrimitiveType::Boolean => make_ree(DataType::Boolean),
+<a href=#1235 id=1235 data-nosnippet>1235</a> PrimitiveType::Int => make_ree(DataType::Int32),
+<a href=#1236 id=1236 data-nosnippet>1236</a> PrimitiveType::Long => make_ree(DataType::Int64),
+<a href=#1237 id=1237 data-nosnippet>1237</a> PrimitiveType::Float => make_ree(DataType::Float32),
+<a href=#1238 id=1238 data-nosnippet>1238</a> PrimitiveType::Double => make_ree(DataType::Float64),
+<a href=#1239 id=1239 data-nosnippet>1239</a> PrimitiveType::Date => make_ree(DataType::Date32),
+<a href=#1240 id=1240 data-nosnippet>1240</a> PrimitiveType::Time => make_ree(DataType::Int64),
+<a href=#1241 id=1241 data-nosnippet>1241</a> PrimitiveType::Timestamp => make_ree(DataType::Int64),
+<a href=#1242 id=1242 data-nosnippet>1242</a> PrimitiveType::Timestamptz => make_ree(DataType::Int64),
+<a href=#1243 id=1243 data-nosnippet>1243</a> PrimitiveType::TimestampNs => make_ree(DataType::Int64),
+<a href=#1244 id=1244 data-nosnippet>1244</a> PrimitiveType::TimestamptzNs => make_ree(DataType::Int64),
+<a href=#1245 id=1245 data-nosnippet>1245</a> PrimitiveType::String => make_ree(DataType::Utf8),
+<a href=#1246 id=1246 data-nosnippet>1246</a> PrimitiveType::Uuid => make_ree(DataType::Binary),
+<a href=#1247 id=1247 data-nosnippet>1247</a> PrimitiveType::Fixed(<span class="kw">_</span>) => make_ree(DataType::Binary),
+<a href=#1248 id=1248 data-nosnippet>1248</a> PrimitiveType::Binary => make_ree(DataType::Binary),
+<a href=#1249 id=1249 data-nosnippet>1249</a> PrimitiveType::Decimal { precision, scale } => {
+<a href=#1250 id=1250 data-nosnippet>1250</a> make_ree(DataType::Decimal128(<span class="kw-2">*</span>precision <span class="kw">as </span>u8, <span class="kw-2">*</span>scale <span class="kw">as </span>i8))
+<a href=#1251 id=1251 data-nosnippet>1251</a> }
+<a href=#1252 id=1252 data-nosnippet>1252</a> }
+<a href=#1253 id=1253 data-nosnippet>1253</a>}
+<a href=#1254 id=1254 data-nosnippet>1254</a>
+<a href=#1255 id=1255 data-nosnippet>1255</a><span class="doccomment">/// A visitor that strips metadata from an Arrow schema.
+<a href=#1256 id=1256 data-nosnippet>1256</a>///
+<a href=#1257 id=1257 data-nosnippet>1257</a>/// This visitor recursively removes all metadata from fields at every level of the schema,
+<a href=#1258 id=1258 data-nosnippet>1258</a>/// including nested struct, list, and map fields. This is useful for schema comparison
+<a href=#1259 id=1259 data-nosnippet>1259</a>/// where metadata differences should be ignored.
+<a href=#1260 id=1260 data-nosnippet>1260</a></span><span class="kw">struct </span>MetadataStripVisitor {
+<a href=#1261 id=1261 data-nosnippet>1261</a> <span class="doccomment">/// Fields whose types are still being visited, innermost last
+<a href=#1262 id=1262 data-nosnippet>1262</a> </span>pending_fields: Vec<PendingField>,
+<a href=#1263 id=1263 data-nosnippet>1263</a>}
<a href=#1264 id=1264 data-nosnippet>1264</a>
-<a href=#1265 id=1265 data-nosnippet>1265</a> <span class="kw">fn </span>before_list_element(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><()> {
-<a href=#1266 id=1266 data-nosnippet>1266</a> <span class="self">self</span>.start_field(LIST_FIELD_NAME, field.is_nullable())
-<a href=#1267 id=1267 data-nosnippet>1267</a> }
-<a href=#1268 id=1268 data-nosnippet>1268</a>
-<a href=#1269 id=1269 data-nosnippet>1269</a> <span class="kw">fn </span>before_map_key(<span class="kw-2">&mut </span><span class="self">self</span>, _field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><()> {
-<a href=#1270 id=1270 data-nosnippet>1270</a> <span class="comment">// Map keys are always required, as `schema_to_arrow_schema` builds them.
-<a href=#1271 id=1271 data-nosnippet>1271</a> </span><span class="self">self</span>.start_field(MAP_KEY_FIELD_NAME, <span class="bool-val">false</span>)
-<a href=#1272 id=1272 data-nosnippet>1272</a> }
-<a href=#1273 id=1273 data-nosnippet>1273</a>
-<a href=#1274 id=1274 data-nosnippet>1274</a> <span class="kw">fn </span>before_map_value(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><()> {
-<a href=#1275 id=1275 data-nosnippet>1275</a> <span class="self">self</span>.start_field(MAP_VALUE_FIELD_NAME, field.is_nullable())
+<a href=#1265 id=1265 data-nosnippet>1265</a><span class="doccomment">/// What `MetadataStripVisitor` keeps of a field until its type is visited
+<a href=#1266 id=1266 data-nosnippet>1266</a></span><span class="kw">struct </span>PendingField {
+<a href=#1267 id=1267 data-nosnippet>1267</a> name: String,
+<a href=#1268 id=1268 data-nosnippet>1268</a> nullable: bool,
+<a href=#1269 id=1269 data-nosnippet>1269</a>}
+<a href=#1270 id=1270 data-nosnippet>1270</a>
+<a href=#1271 id=1271 data-nosnippet>1271</a><span class="kw">impl </span>MetadataStripVisitor {
+<a href=#1272 id=1272 data-nosnippet>1272</a> <span class="kw">fn </span>new() -> <span class="self">Self </span>{
+<a href=#1273 id=1273 data-nosnippet>1273</a> <span class="self">Self </span>{
+<a href=#1274 id=1274 data-nosnippet>1274</a> pending_fields: Vec::new(),
+<a href=#1275 id=1275 data-nosnippet>1275</a> }
<a href=#1276 id=1276 data-nosnippet>1276</a> }
<a href=#1277 id=1277 data-nosnippet>1277</a>
-<a href=#1278 id=1278 data-nosnippet>1278</a> <span class="kw">fn </span>schema(<span class="kw-2">&mut </span><span class="self">self</span>, _schema: <span class="kw-2">&</span>ArrowSchema, values: Vec<<span class="self">Self</span>::T>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::U> {
-<a href=#1279 id=1279 data-nosnippet>1279</a> <span class="kw">if </span>!<span class="self">self</span>.pending_fields.is_empty() {
-<a href=#1280 id=1280 data-nosnippet>1280</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#1281 id=1281 data-nosnippet>1281</a> ErrorKind::Unexpected,
-<a href=#1282 id=1282 data-nosnippet>1282</a> <span class="macro">format!</span>(
-<a href=#1283 id=1283 data-nosnippet>1283</a> <span class="string">"{} fields left on the field stack after traversal"</span>,
-<a href=#1284 id=1284 data-nosnippet>1284</a> <span class="self">self</span>.pending_fields.len()
-<a href=#1285 id=1285 data-nosnippet>1285</a> ),
-<a href=#1286 id=1286 data-nosnippet>1286</a> ));
-<a href=#1287 id=1287 data-nosnippet>1287</a> }
-<a href=#1288 id=1288 data-nosnippet>1288</a> <span class="prelude-val">Ok</span>(ArrowSchema::new(values))
-<a href=#1289 id=1289 data-nosnippet>1289</a> }
-<a href=#1290 id=1290 data-nosnippet>1290</a>
-<a href=#1291 id=1291 data-nosnippet>1291</a> <span class="kw">fn </span>r#struct(<span class="kw-2">&mut </span><span class="self">self</span>, _fields: <span class="kw-2">&</span>Fields, results: Vec<<span class="self">Self</span>::T>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#1292 id=1292 data-nosnippet>1292</a> <span class="self">self</span>.finish_field(DataType::Struct(Fields::from(results)), <span class="string">"struct"</span>)
-<a href=#1293 id=1293 data-nosnippet>1293</a> }
-<a href=#1294 id=1294 data-nosnippet>1294</a>
-<a href=#1295 id=1295 data-nosnippet>1295</a> <span class="kw">fn </span>list(<span class="kw-2">&mut </span><span class="self">self</span>, list: <span class="kw-2">&</span>DataType, value: <span class="self">Self</span>::T) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#1296 id=1296 data-nosnippet>1296</a> <span class="kw">let </span>list_type = <span class="kw">match </span>list {
-<a href=#1297 id=1297 data-nosnippet>1297</a> DataType::List(<span class="kw">_</span>) => DataType::List(Arc::new(value)),
-<a href=#1298 id=1298 data-nosnippet>1298</a> DataType::LargeList(<span class="kw">_</span>) => DataType::LargeList(Arc::new(value)),
-<a href=#1299 id=1299 data-nosnippet>1299</a> DataType::FixedSizeList(<span class="kw">_</span>, size) => DataType::FixedSizeList(Arc::new(value), <span class="kw-2">*</span>size),
-<a href=#1300 id=1300 data-nosnippet>1300</a> <span class="kw">_ </span>=> {
-<a href=#1301 id=1301 data-nosnippet>1301</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#1302 id=1302 data-nosnippet>1302</a> ErrorKind::Unexpected,
-<a href=#1303 id=1303 data-nosnippet>1303</a> <span class="macro">format!</span>(<span class="string">"Expected list type, got {list}"</span>),
-<a href=#1304 id=1304 data-nosnippet>1304</a> ));
-<a href=#1305 id=1305 data-nosnippet>1305</a> }
-<a href=#1306 id=1306 data-nosnippet>1306</a> };
+<a href=#1278 id=1278 data-nosnippet>1278</a> <span class="doccomment">/// Records a field whose type is about to be visited.
+<a href=#1279 id=1279 data-nosnippet>1279</a> </span><span class="kw">fn </span>start_field(<span class="kw-2">&mut </span><span class="self">self</span>, name: <span class="kw-2">&</span>str, nullable: bool) -> <span class="prelude-ty">Result</span><()> {
+<a href=#1280 id=1280 data-nosnippet>1280</a> <span class="self">self</span>.pending_fields.push(PendingField {
+<a href=#1281 id=1281 data-nosnippet>1281</a> name: name.to_string(),
+<a href=#1282 id=1282 data-nosnippet>1282</a> nullable,
+<a href=#1283 id=1283 data-nosnippet>1283</a> });
+<a href=#1284 id=1284 data-nosnippet>1284</a> <span class="prelude-val">Ok</span>(())
+<a href=#1285 id=1285 data-nosnippet>1285</a> }
+<a href=#1286 id=1286 data-nosnippet>1286</a>
+<a href=#1287 id=1287 data-nosnippet>1287</a> <span class="doccomment">/// Builds the innermost pending field with `data_type` and no metadata.
+<a href=#1288 id=1288 data-nosnippet>1288</a> /// `kind` names the type in the error for an unbalanced stack.
+<a href=#1289 id=1289 data-nosnippet>1289</a> </span><span class="kw">fn </span>finish_field(<span class="kw-2">&mut </span><span class="self">self</span>, data_type: DataType, kind: <span class="kw-2">&</span>str) -> <span class="prelude-ty">Result</span><Field> {
+<a href=#1290 id=1290 data-nosnippet>1290</a> <span class="kw">let </span>PendingField { name, nullable } = <span class="self">self</span>.pending_fields.pop().ok_or_else(|| {
+<a href=#1291 id=1291 data-nosnippet>1291</a> Error::new(
+<a href=#1292 id=1292 data-nosnippet>1292</a> ErrorKind::Unexpected,
+<a href=#1293 id=1293 data-nosnippet>1293</a> <span class="macro">format!</span>(<span class="string">"Field stack underflow in {kind}"</span>),
+<a href=#1294 id=1294 data-nosnippet>1294</a> )
+<a href=#1295 id=1295 data-nosnippet>1295</a> })<span class="question-mark">?</span>;
+<a href=#1296 id=1296 data-nosnippet>1296</a> <span class="prelude-val">Ok</span>(Field::new(name, data_type, nullable))
+<a href=#1297 id=1297 data-nosnippet>1297</a> }
+<a href=#1298 id=1298 data-nosnippet>1298</a>}
+<a href=#1299 id=1299 data-nosnippet>1299</a>
+<a href=#1300 id=1300 data-nosnippet>1300</a><span class="kw">impl </span>ArrowSchemaVisitor <span class="kw">for </span>MetadataStripVisitor {
+<a href=#1301 id=1301 data-nosnippet>1301</a> <span class="kw">type </span>T = Field;
+<a href=#1302 id=1302 data-nosnippet>1302</a> <span class="kw">type </span>U = ArrowSchema;
+<a href=#1303 id=1303 data-nosnippet>1303</a>
+<a href=#1304 id=1304 data-nosnippet>1304</a> <span class="kw">fn </span>before_field(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><()> {
+<a href=#1305 id=1305 data-nosnippet>1305</a> <span class="self">self</span>.start_field(field.name(), field.is_nullable())
+<a href=#1306 id=1306 data-nosnippet>1306</a> }
<a href=#1307 id=1307 data-nosnippet>1307</a>
-<a href=#1308 id=1308 data-nosnippet>1308</a> <span class="self">self</span>.finish_field(list_type, <span class="string">"list"</span>)
-<a href=#1309 id=1309 data-nosnippet>1309</a> }
-<a href=#1310 id=1310 data-nosnippet>1310</a>
-<a href=#1311 id=1311 data-nosnippet>1311</a> <span class="kw">fn </span>map(<span class="kw-2">&mut </span><span class="self">self</span>, map: <span class="kw-2">&</span>DataType, key_value: <span class="self">Self</span>::T, value: <span class="self">Self</span>::T) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#1312 id=1312 data-nosnippet>1312</a> <span class="comment">// Reconstruct the map's struct field (contains key and value)
-<a href=#1313 id=1313 data-nosnippet>1313</a> </span><span class="kw">let </span>struct_field = Field::new(
-<a href=#1314 id=1314 data-nosnippet>1314</a> DEFAULT_MAP_FIELD_NAME,
-<a href=#1315 id=1315 data-nosnippet>1315</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[key_value, value])),
-<a href=#1316 id=1316 data-nosnippet>1316</a> <span class="bool-val">false</span>,
-<a href=#1317 id=1317 data-nosnippet>1317</a> );
-<a href=#1318 id=1318 data-nosnippet>1318</a>
-<a href=#1319 id=1319 data-nosnippet>1319</a> <span class="comment">// Get the sorted flag from the original map type
-<a href=#1320 id=1320 data-nosnippet>1320</a> </span><span class="kw">let </span>sorted = <span class="kw">match </span>map {
-<a href=#1321 id=1321 data-nosnippet>1321</a> DataType::Map(<span class="kw">_</span>, sorted) => <span class="kw-2">*</span>sorted,
-<a href=#1322 id=1322 data-nosnippet>1322</a> <span class="kw">_ </span>=> {
-<a href=#1323 id=1323 data-nosnippet>1323</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
-<a href=#1324 id=1324 data-nosnippet>1324</a> ErrorKind::Unexpected,
-<a href=#1325 id=1325 data-nosnippet>1325</a> <span class="macro">format!</span>(<span class="string">"Expected map type, got {map}"</span>),
-<a href=#1326 id=1326 data-nosnippet>1326</a> ));
-<a href=#1327 id=1327 data-nosnippet>1327</a> }
-<a href=#1328 id=1328 data-nosnippet>1328</a> };
-<a href=#1329 id=1329 data-nosnippet>1329</a>
-<a href=#1330 id=1330 data-nosnippet>1330</a> <span class="self">self</span>.finish_field(DataType::Map(Arc::new(struct_field), sorted), <span class="string">"map"</span>)
-<a href=#1331 id=1331 data-nosnippet>1331</a> }
-<a href=#1332 id=1332 data-nosnippet>1332</a>
-<a href=#1333 id=1333 data-nosnippet>1333</a> <span class="kw">fn </span>primitive(<span class="kw-2">&mut </span><span class="self">self</span>, p: <span class="kw-2">&</span>DataType) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
-<a href=#1334 id=1334 data-nosnippet>1334</a> <span class="self">self</span>.finish_field(p.clone(), <span class="string">"primitive"</span>)
-<a href=#1335 id=1335 data-nosnippet>1335</a> }
-<a href=#1336 id=1336 data-nosnippet>1336</a>}
+<a href=#1308 id=1308 data-nosnippet>1308</a> <span class="kw">fn </span>before_list_element(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><()> {
+<a href=#1309 id=1309 data-nosnippet>1309</a> <span class="self">self</span>.start_field(LIST_FIELD_NAME, field.is_nullable())
+<a href=#1310 id=1310 data-nosnippet>1310</a> }
+<a href=#1311 id=1311 data-nosnippet>1311</a>
+<a href=#1312 id=1312 data-nosnippet>1312</a> <span class="kw">fn </span>before_map_key(<span class="kw-2">&mut </span><span class="self">self</span>, _field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><()> {
+<a href=#1313 id=1313 data-nosnippet>1313</a> <span class="comment">// Map keys are always required, as `schema_to_arrow_schema` builds them.
+<a href=#1314 id=1314 data-nosnippet>1314</a> </span><span class="self">self</span>.start_field(MAP_KEY_FIELD_NAME, <span class="bool-val">false</span>)
+<a href=#1315 id=1315 data-nosnippet>1315</a> }
+<a href=#1316 id=1316 data-nosnippet>1316</a>
+<a href=#1317 id=1317 data-nosnippet>1317</a> <span class="kw">fn </span>before_map_value(<span class="kw-2">&mut </span><span class="self">self</span>, field: <span class="kw-2">&</span>FieldRef) -> <span class="prelude-ty">Result</span><()> {
+<a href=#1318 id=1318 data-nosnippet>1318</a> <span class="self">self</span>.start_field(MAP_VALUE_FIELD_NAME, field.is_nullable())
+<a href=#1319 id=1319 data-nosnippet>1319</a> }
+<a href=#1320 id=1320 data-nosnippet>1320</a>
+<a href=#1321 id=1321 data-nosnippet>1321</a> <span class="kw">fn </span>schema(<span class="kw-2">&mut </span><span class="self">self</span>, _schema: <span class="kw-2">&</span>ArrowSchema, values: Vec<<span class="self">Self</span>::T>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::U> {
+<a href=#1322 id=1322 data-nosnippet>1322</a> <span class="kw">if </span>!<span class="self">self</span>.pending_fields.is_empty() {
+<a href=#1323 id=1323 data-nosnippet>1323</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#1324 id=1324 data-nosnippet>1324</a> ErrorKind::Unexpected,
+<a href=#1325 id=1325 data-nosnippet>1325</a> <span class="macro">format!</span>(
+<a href=#1326 id=1326 data-nosnippet>1326</a> <span class="string">"{} fields left on the field stack after traversal"</span>,
+<a href=#1327 id=1327 data-nosnippet>1327</a> <span class="self">self</span>.pending_fields.len()
+<a href=#1328 id=1328 data-nosnippet>1328</a> ),
+<a href=#1329 id=1329 data-nosnippet>1329</a> ));
+<a href=#1330 id=1330 data-nosnippet>1330</a> }
+<a href=#1331 id=1331 data-nosnippet>1331</a> <span class="prelude-val">Ok</span>(ArrowSchema::new(values))
+<a href=#1332 id=1332 data-nosnippet>1332</a> }
+<a href=#1333 id=1333 data-nosnippet>1333</a>
+<a href=#1334 id=1334 data-nosnippet>1334</a> <span class="kw">fn </span>r#struct(<span class="kw-2">&mut </span><span class="self">self</span>, _fields: <span class="kw-2">&</span>Fields, results: Vec<<span class="self">Self</span>::T>) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#1335 id=1335 data-nosnippet>1335</a> <span class="self">self</span>.finish_field(DataType::Struct(Fields::from(results)), <span class="string">"struct"</span>)
+<a href=#1336 id=1336 data-nosnippet>1336</a> }
<a href=#1337 id=1337 data-nosnippet>1337</a>
-<a href=#1338 id=1338 data-nosnippet>1338</a><span class="doccomment">/// Strips all metadata from an Arrow schema and its nested fields.
-<a href=#1339 id=1339 data-nosnippet>1339</a>///
-<a href=#1340 id=1340 data-nosnippet>1340</a>/// This function recursively removes metadata from all fields at every level of the schema,
-<a href=#1341 id=1341 data-nosnippet>1341</a>/// including nested struct, list, and map fields. This is useful for schema comparison
-<a href=#1342 id=1342 data-nosnippet>1342</a>/// where metadata differences should be ignored.
-<a href=#1343 id=1343 data-nosnippet>1343</a>///
-<a href=#1344 id=1344 data-nosnippet>1344</a>/// Some other differences are normalized away too, so that schemas that differ only in
-<a href=#1345 id=1345 data-nosnippet>1345</a>/// them compare equal once stripped. The fields inside lists and maps are renamed as
-<a href=#1346 id=1346 data-nosnippet>1346</a>/// [`schema_to_arrow_schema`] names them, and dictionaries are unwrapped:
-<a href=#1347 id=1347 data-nosnippet>1347</a>/// - A list's element field is renamed to [`LIST_FIELD_NAME`], so `item` (the arrow-rs
-<a href=#1348 id=1348 data-nosnippet>1348</a>/// default) becomes `element`.
-<a href=#1349 id=1349 data-nosnippet>1349</a>/// - A map's entries field is renamed to [`DEFAULT_MAP_FIELD_NAME`] and made non-nullable.
-<a href=#1350 id=1350 data-nosnippet>1350</a>/// - A map's key and value fields are renamed to [`MAP_KEY_FIELD_NAME`] and
-<a href=#1351 id=1351 data-nosnippet>1351</a>/// [`MAP_VALUE_FIELD_NAME`], so `keys` and `values` (the arrow-rs `MapBuilder` default)
-<a href=#1352 id=1352 data-nosnippet>1352</a>/// become `key` and `value`, and the key is made non-nullable.
-<a href=#1353 id=1353 data-nosnippet>1353</a>/// - A dictionary-encoded field becomes a field of the dictionary's value type.
-<a href=#1354 id=1354 data-nosnippet>1354</a>///
-<a href=#1355 id=1355 data-nosnippet>1355</a>/// The names of the schema's fields and of struct fields are kept. Extension type
-<a href=#1356 id=1356 data-nosnippet>1356</a>/// metadata (`ARROW:extension:*`) is dropped with the rest, so a variant field becomes a
-<a href=#1357 id=1357 data-nosnippet>1357</a>/// plain struct of its `metadata` and `value` fields.
-<a href=#1358 id=1358 data-nosnippet>1358</a>///
-<a href=#1359 id=1359 data-nosnippet>1359</a>/// # Arguments
-<a href=#1360 id=1360 data-nosnippet>1360</a>/// * `schema` - The Arrow schema to strip metadata from
-<a href=#1361 id=1361 data-nosnippet>1361</a>///
-<a href=#1362 id=1362 data-nosnippet>1362</a>/// # Returns
-<a href=#1363 id=1363 data-nosnippet>1363</a>/// A new Arrow schema with all metadata removed, or an error if the schema structure
-<a href=#1364 id=1364 data-nosnippet>1364</a>/// is invalid.
-<a href=#1365 id=1365 data-nosnippet>1365</a>///
-<a href=#1366 id=1366 data-nosnippet>1366</a>/// # Example
-<a href=#1367 id=1367 data-nosnippet>1367</a>/// ```
-<a href=#1368 id=1368 data-nosnippet>1368</a>/// use std::collections::HashMap;
-<a href=#1369 id=1369 data-nosnippet>1369</a>///
-<a href=#1370 id=1370 data-nosnippet>1370</a>/// use arrow_schema::{DataType, Field, Schema as ArrowSchema};
-<a href=#1371 id=1371 data-nosnippet>1371</a>/// use iceberg::arrow::strip_metadata_from_schema;
-<a href=#1372 id=1372 data-nosnippet>1372</a>///
-<a href=#1373 id=1373 data-nosnippet>1373</a>/// let mut metadata = HashMap::new();
-<a href=#1374 id=1374 data-nosnippet>1374</a>/// metadata.insert("key".to_string(), "value".to_string());
-<a href=#1375 id=1375 data-nosnippet>1375</a>///
-<a href=#1376 id=1376 data-nosnippet>1376</a>/// let field = Field::new("col1", DataType::Int32, false).with_metadata(metadata);
-<a href=#1377 id=1377 data-nosnippet>1377</a>/// let schema = ArrowSchema::new(vec![field]);
-<a href=#1378 id=1378 data-nosnippet>1378</a>///
-<a href=#1379 id=1379 data-nosnippet>1379</a>/// let stripped = strip_metadata_from_schema(&schema).unwrap();
-<a href=#1380 id=1380 data-nosnippet>1380</a>/// assert!(stripped.field(0).metadata().is_empty());
-<a href=#1381 id=1381 data-nosnippet>1381</a>/// ```
-<a href=#1382 id=1382 data-nosnippet>1382</a></span><span class="kw">pub fn </span>strip_metadata_from_schema(schema: <span class="kw-2">&</span>ArrowSchema) -> <span class="prelude-ty">Result</span><ArrowSchema> {
-<a href=#1383 id=1383 data-nosnippet>1383</a> <span class="kw">let </span><span class="kw-2">mut </span>visitor = MetadataStripVisitor::new();
-<a href=#1384 id=1384 data-nosnippet>1384</a> visit_schema(schema, <span class="kw-2">&mut </span>visitor)
-<a href=#1385 id=1385 data-nosnippet>1385</a>}
-<a href=#1386 id=1386 data-nosnippet>1386</a>
-<a href=#1387 id=1387 data-nosnippet>1387</a><span class="attr">#[cfg(test)]
-<a href=#1388 id=1388 data-nosnippet>1388</a></span><span class="kw">mod </span>tests {
-<a href=#1389 id=1389 data-nosnippet>1389</a> <span class="kw">use </span>std::collections::HashMap;
-<a href=#1390 id=1390 data-nosnippet>1390</a> <span class="kw">use </span>std::sync::Arc;
-<a href=#1391 id=1391 data-nosnippet>1391</a>
-<a href=#1392 id=1392 data-nosnippet>1392</a> <span class="kw">use </span>arrow_schema::{DataType, Field, Schema <span class="kw">as </span>ArrowSchema, TimeUnit};
-<a href=#1393 id=1393 data-nosnippet>1393</a>
-<a href=#1394 id=1394 data-nosnippet>1394</a> <span class="kw">use </span>super::<span class="kw-2">*</span>;
-<a href=#1395 id=1395 data-nosnippet>1395</a> <span class="kw">use </span><span class="kw">crate</span>::spec::decimal_utils::decimal_new;
-<a href=#1396 id=1396 data-nosnippet>1396</a> <span class="kw">use </span><span class="kw">crate</span>::spec::{Literal, Schema};
-<a href=#1397 id=1397 data-nosnippet>1397</a>
-<a href=#1398 id=1398 data-nosnippet>1398</a> <span class="doccomment">/// Create a simple field with metadata.
-<a href=#1399 id=1399 data-nosnippet>1399</a> </span><span class="kw">fn </span>simple_field(name: <span class="kw-2">&</span>str, ty: DataType, nullable: bool, value: <span class="kw-2">&</span>str) -> Field {
-<a href=#1400 id=1400 data-nosnippet>1400</a> Field::new(name, ty, nullable).with_metadata(HashMap::from([(
-<a href=#1401 id=1401 data-nosnippet>1401</a> PARQUET_FIELD_ID_META_KEY.to_string(),
-<a href=#1402 id=1402 data-nosnippet>1402</a> value.to_string(),
-<a href=#1403 id=1403 data-nosnippet>1403</a> )]))
-<a href=#1404 id=1404 data-nosnippet>1404</a> }
-<a href=#1405 id=1405 data-nosnippet>1405</a>
-<a href=#1406 id=1406 data-nosnippet>1406</a> <span class="kw">fn </span>arrow_schema_for_arrow_schema_to_schema_test() -> ArrowSchema {
-<a href=#1407 id=1407 data-nosnippet>1407</a> <span class="kw">let </span>fields = Fields::from(<span class="macro">vec!</span>[
-<a href=#1408 id=1408 data-nosnippet>1408</a> simple_field(<span class="string">"key"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"28"</span>),
-<a href=#1409 id=1409 data-nosnippet>1409</a> simple_field(<span class="string">"value"</span>, DataType::Utf8, <span class="bool-val">true</span>, <span class="string">"29"</span>),
-<a href=#1410 id=1410 data-nosnippet>1410</a> ]);
-<a href=#1411 id=1411 data-nosnippet>1411</a>
-<a href=#1412 id=1412 data-nosnippet>1412</a> <span class="kw">let </span>r#struct = DataType::Struct(fields);
-<a href=#1413 id=1413 data-nosnippet>1413</a> <span class="kw">let </span>map = DataType::Map(
-<a href=#1414 id=1414 data-nosnippet>1414</a> Arc::new(simple_field(DEFAULT_MAP_FIELD_NAME, r#struct, <span class="bool-val">false</span>, <span class="string">"17"</span>)),
-<a href=#1415 id=1415 data-nosnippet>1415</a> <span class="bool-val">false</span>,
-<a href=#1416 id=1416 data-nosnippet>1416</a> );
-<a href=#1417 id=1417 data-nosnippet>1417</a> <span class="kw">let </span>dictionary = DataType::Dictionary(Box::new(DataType::Int32), Box::new(DataType::Utf8));
-<a href=#1418 id=1418 data-nosnippet>1418</a>
-<a href=#1419 id=1419 data-nosnippet>1419</a> <span class="kw">let </span>fields = Fields::from(<span class="macro">vec!</span>[
-<a href=#1420 id=1420 data-nosnippet>1420</a> simple_field(<span class="string">"aa"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"18"</span>),
-<a href=#1421 id=1421 data-nosnippet>1421</a> simple_field(<span class="string">"bb"</span>, DataType::Utf8, <span class="bool-val">true</span>, <span class="string">"19"</span>),
-<a href=#1422 id=1422 data-nosnippet>1422</a> simple_field(
-<a href=#1423 id=1423 data-nosnippet>1423</a> <span class="string">"cc"</span>,
-<a href=#1424 id=1424 data-nosnippet>1424</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">None</span>),
-<a href=#1425 id=1425 data-nosnippet>1425</a> <span class="bool-val">false</span>,
-<a href=#1426 id=1426 data-nosnippet>1426</a> <span class="string">"20"</span>,
-<a href=#1427 id=1427 data-nosnippet>1427</a> ),
-<a href=#1428 id=1428 data-nosnippet>1428</a> ]);
+<a href=#1338 id=1338 data-nosnippet>1338</a> <span class="kw">fn </span>list(<span class="kw-2">&mut </span><span class="self">self</span>, list: <span class="kw-2">&</span>DataType, value: <span class="self">Self</span>::T) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#1339 id=1339 data-nosnippet>1339</a> <span class="kw">let </span>list_type = <span class="kw">match </span>list {
+<a href=#1340 id=1340 data-nosnippet>1340</a> DataType::List(<span class="kw">_</span>) => DataType::List(Arc::new(value)),
+<a href=#1341 id=1341 data-nosnippet>1341</a> DataType::LargeList(<span class="kw">_</span>) => DataType::LargeList(Arc::new(value)),
+<a href=#1342 id=1342 data-nosnippet>1342</a> DataType::FixedSizeList(<span class="kw">_</span>, size) => DataType::FixedSizeList(Arc::new(value), <span class="kw-2">*</span>size),
+<a href=#1343 id=1343 data-nosnippet>1343</a> <span class="kw">_ </span>=> {
+<a href=#1344 id=1344 data-nosnippet>1344</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#1345 id=1345 data-nosnippet>1345</a> ErrorKind::Unexpected,
+<a href=#1346 id=1346 data-nosnippet>1346</a> <span class="macro">format!</span>(<span class="string">"Expected list type, got {list}"</span>),
+<a href=#1347 id=1347 data-nosnippet>1347</a> ));
+<a href=#1348 id=1348 data-nosnippet>1348</a> }
+<a href=#1349 id=1349 data-nosnippet>1349</a> };
+<a href=#1350 id=1350 data-nosnippet>1350</a>
+<a href=#1351 id=1351 data-nosnippet>1351</a> <span class="self">self</span>.finish_field(list_type, <span class="string">"list"</span>)
+<a href=#1352 id=1352 data-nosnippet>1352</a> }
+<a href=#1353 id=1353 data-nosnippet>1353</a>
+<a href=#1354 id=1354 data-nosnippet>1354</a> <span class="kw">fn </span>map(<span class="kw-2">&mut </span><span class="self">self</span>, map: <span class="kw-2">&</span>DataType, key_value: <span class="self">Self</span>::T, value: <span class="self">Self</span>::T) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#1355 id=1355 data-nosnippet>1355</a> <span class="comment">// Reconstruct the map's struct field (contains key and value)
+<a href=#1356 id=1356 data-nosnippet>1356</a> </span><span class="kw">let </span>struct_field = Field::new(
+<a href=#1357 id=1357 data-nosnippet>1357</a> DEFAULT_MAP_FIELD_NAME,
+<a href=#1358 id=1358 data-nosnippet>1358</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[key_value, value])),
+<a href=#1359 id=1359 data-nosnippet>1359</a> <span class="bool-val">false</span>,
+<a href=#1360 id=1360 data-nosnippet>1360</a> );
+<a href=#1361 id=1361 data-nosnippet>1361</a>
+<a href=#1362 id=1362 data-nosnippet>1362</a> <span class="comment">// Get the sorted flag from the original map type
+<a href=#1363 id=1363 data-nosnippet>1363</a> </span><span class="kw">let </span>sorted = <span class="kw">match </span>map {
+<a href=#1364 id=1364 data-nosnippet>1364</a> DataType::Map(<span class="kw">_</span>, sorted) => <span class="kw-2">*</span>sorted,
+<a href=#1365 id=1365 data-nosnippet>1365</a> <span class="kw">_ </span>=> {
+<a href=#1366 id=1366 data-nosnippet>1366</a> <span class="kw">return </span><span class="prelude-val">Err</span>(Error::new(
+<a href=#1367 id=1367 data-nosnippet>1367</a> ErrorKind::Unexpected,
+<a href=#1368 id=1368 data-nosnippet>1368</a> <span class="macro">format!</span>(<span class="string">"Expected map type, got {map}"</span>),
+<a href=#1369 id=1369 data-nosnippet>1369</a> ));
+<a href=#1370 id=1370 data-nosnippet>1370</a> }
+<a href=#1371 id=1371 data-nosnippet>1371</a> };
+<a href=#1372 id=1372 data-nosnippet>1372</a>
+<a href=#1373 id=1373 data-nosnippet>1373</a> <span class="self">self</span>.finish_field(DataType::Map(Arc::new(struct_field), sorted), <span class="string">"map"</span>)
+<a href=#1374 id=1374 data-nosnippet>1374</a> }
+<a href=#1375 id=1375 data-nosnippet>1375</a>
+<a href=#1376 id=1376 data-nosnippet>1376</a> <span class="kw">fn </span>primitive(<span class="kw-2">&mut </span><span class="self">self</span>, p: <span class="kw-2">&</span>DataType) -> <span class="prelude-ty">Result</span><<span class="self">Self</span>::T> {
+<a href=#1377 id=1377 data-nosnippet>1377</a> <span class="self">self</span>.finish_field(p.clone(), <span class="string">"primitive"</span>)
+<a href=#1378 id=1378 data-nosnippet>1378</a> }
+<a href=#1379 id=1379 data-nosnippet>1379</a>}
+<a href=#1380 id=1380 data-nosnippet>1380</a>
+<a href=#1381 id=1381 data-nosnippet>1381</a><span class="doccomment">/// Strips all metadata from an Arrow schema and its nested fields.
+<a href=#1382 id=1382 data-nosnippet>1382</a>///
+<a href=#1383 id=1383 data-nosnippet>1383</a>/// This function recursively removes metadata from all fields at every level of the schema,
+<a href=#1384 id=1384 data-nosnippet>1384</a>/// including nested struct, list, and map fields. This is useful for schema comparison
+<a href=#1385 id=1385 data-nosnippet>1385</a>/// where metadata differences should be ignored.
+<a href=#1386 id=1386 data-nosnippet>1386</a>///
+<a href=#1387 id=1387 data-nosnippet>1387</a>/// Some other differences are normalized away too, so that schemas that differ only in
+<a href=#1388 id=1388 data-nosnippet>1388</a>/// them compare equal once stripped. The fields inside lists and maps are renamed as
+<a href=#1389 id=1389 data-nosnippet>1389</a>/// [`schema_to_arrow_schema`] names them, and dictionaries are unwrapped:
+<a href=#1390 id=1390 data-nosnippet>1390</a>/// - A list's element field is renamed to [`LIST_FIELD_NAME`], so `item` (the arrow-rs
+<a href=#1391 id=1391 data-nosnippet>1391</a>/// default) becomes `element`.
+<a href=#1392 id=1392 data-nosnippet>1392</a>/// - A map's entries field is renamed to [`DEFAULT_MAP_FIELD_NAME`] and made non-nullable.
+<a href=#1393 id=1393 data-nosnippet>1393</a>/// - A map's key and value fields are renamed to [`MAP_KEY_FIELD_NAME`] and
+<a href=#1394 id=1394 data-nosnippet>1394</a>/// [`MAP_VALUE_FIELD_NAME`], so `keys` and `values` (the arrow-rs `MapBuilder` default)
+<a href=#1395 id=1395 data-nosnippet>1395</a>/// become `key` and `value`, and the key is made non-nullable.
+<a href=#1396 id=1396 data-nosnippet>1396</a>/// - A dictionary-encoded field becomes a field of the dictionary's value type.
+<a href=#1397 id=1397 data-nosnippet>1397</a>///
+<a href=#1398 id=1398 data-nosnippet>1398</a>/// The names of the schema's fields and of struct fields are kept. Extension type
+<a href=#1399 id=1399 data-nosnippet>1399</a>/// metadata (`ARROW:extension:*`) is dropped with the rest, so a variant field becomes a
+<a href=#1400 id=1400 data-nosnippet>1400</a>/// plain struct of its `metadata` and `value` fields.
+<a href=#1401 id=1401 data-nosnippet>1401</a>///
+<a href=#1402 id=1402 data-nosnippet>1402</a>/// # Arguments
+<a href=#1403 id=1403 data-nosnippet>1403</a>/// * `schema` - The Arrow schema to strip metadata from
+<a href=#1404 id=1404 data-nosnippet>1404</a>///
+<a href=#1405 id=1405 data-nosnippet>1405</a>/// # Returns
+<a href=#1406 id=1406 data-nosnippet>1406</a>/// A new Arrow schema with all metadata removed, or an error if the schema structure
+<a href=#1407 id=1407 data-nosnippet>1407</a>/// is invalid.
+<a href=#1408 id=1408 data-nosnippet>1408</a>///
+<a href=#1409 id=1409 data-nosnippet>1409</a>/// # Example
+<a href=#1410 id=1410 data-nosnippet>1410</a>/// ```
+<a href=#1411 id=1411 data-nosnippet>1411</a>/// use std::collections::HashMap;
+<a href=#1412 id=1412 data-nosnippet>1412</a>///
+<a href=#1413 id=1413 data-nosnippet>1413</a>/// use arrow_schema::{DataType, Field, Schema as ArrowSchema};
+<a href=#1414 id=1414 data-nosnippet>1414</a>/// use iceberg::arrow::strip_metadata_from_schema;
+<a href=#1415 id=1415 data-nosnippet>1415</a>///
+<a href=#1416 id=1416 data-nosnippet>1416</a>/// let mut metadata = HashMap::new();
+<a href=#1417 id=1417 data-nosnippet>1417</a>/// metadata.insert("key".to_string(), "value".to_string());
+<a href=#1418 id=1418 data-nosnippet>1418</a>///
+<a href=#1419 id=1419 data-nosnippet>1419</a>/// let field = Field::new("col1", DataType::Int32, false).with_metadata(metadata);
+<a href=#1420 id=1420 data-nosnippet>1420</a>/// let schema = ArrowSchema::new(vec![field]);
+<a href=#1421 id=1421 data-nosnippet>1421</a>///
+<a href=#1422 id=1422 data-nosnippet>1422</a>/// let stripped = strip_metadata_from_schema(&schema).unwrap();
+<a href=#1423 id=1423 data-nosnippet>1423</a>/// assert!(stripped.field(0).metadata().is_empty());
+<a href=#1424 id=1424 data-nosnippet>1424</a>/// ```
+<a href=#1425 id=1425 data-nosnippet>1425</a></span><span class="kw">pub fn </span>strip_metadata_from_schema(schema: <span class="kw-2">&</span>ArrowSchema) -> <span class="prelude-ty">Result</span><ArrowSchema> {
+<a href=#1426 id=1426 data-nosnippet>1426</a> <span class="kw">let </span><span class="kw-2">mut </span>visitor = MetadataStripVisitor::new();
+<a href=#1427 id=1427 data-nosnippet>1427</a> visit_schema(schema, <span class="kw-2">&mut </span>visitor)
+<a href=#1428 id=1428 data-nosnippet>1428</a>}
<a href=#1429 id=1429 data-nosnippet>1429</a>
-<a href=#1430 id=1430 data-nosnippet>1430</a> <span class="kw">let </span>r#struct = DataType::Struct(fields);
-<a href=#1431 id=1431 data-nosnippet>1431</a>
-<a href=#1432 id=1432 data-nosnippet>1432</a> ArrowSchema::new(<span class="macro">vec!</span>[
-<a href=#1433 id=1433 data-nosnippet>1433</a> simple_field(<span class="string">"a"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"2"</span>),
-<a href=#1434 id=1434 data-nosnippet>1434</a> simple_field(<span class="string">"b"</span>, DataType::Int64, <span class="bool-val">false</span>, <span class="string">"1"</span>),
-<a href=#1435 id=1435 data-nosnippet>1435</a> simple_field(<span class="string">"c"</span>, DataType::Utf8, <span class="bool-val">false</span>, <span class="string">"3"</span>),
-<a href=#1436 id=1436 data-nosnippet>1436</a> simple_field(<span class="string">"n"</span>, DataType::Utf8, <span class="bool-val">false</span>, <span class="string">"21"</span>),
-<a href=#1437 id=1437 data-nosnippet>1437</a> simple_field(
-<a href=#1438 id=1438 data-nosnippet>1438</a> <span class="string">"d"</span>,
-<a href=#1439 id=1439 data-nosnippet>1439</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">None</span>),
-<a href=#1440 id=1440 data-nosnippet>1440</a> <span class="bool-val">true</span>,
-<a href=#1441 id=1441 data-nosnippet>1441</a> <span class="string">"4"</span>,
-<a href=#1442 id=1442 data-nosnippet>1442</a> ),
-<a href=#1443 id=1443 data-nosnippet>1443</a> simple_field(<span class="string">"e"</span>, DataType::Boolean, <span class="bool-val">true</span>, <span class="string">"6"</span>),
-<a href=#1444 id=1444 data-nosnippet>1444</a> simple_field(<span class="string">"f"</span>, DataType::Float32, <span class="bool-val">false</span>, <span class="string">"5"</span>),
-<a href=#1445 id=1445 data-nosnippet>1445</a> simple_field(<span class="string">"g"</span>, DataType::Float64, <span class="bool-val">false</span>, <span class="string">"7"</span>),
-<a href=#1446 id=1446 data-nosnippet>1446</a> simple_field(<span class="string">"p"</span>, DataType::Decimal128(<span class="number">10</span>, <span class="number">2</span>), <span class="bool-val">false</span>, <span class="string">"27"</span>),
-<a href=#1447 id=1447 data-nosnippet>1447</a> simple_field(<span class="string">"h"</span>, DataType::Date32, <span class="bool-val">false</span>, <span class="string">"8"</span>),
-<a href=#1448 id=1448 data-nosnippet>1448</a> simple_field(<span class="string">"i"</span>, DataType::Time64(TimeUnit::Microsecond), <span class="bool-val">false</span>, <span class="string">"9"</span>),
-<a href=#1449 id=1449 data-nosnippet>1449</a> simple_field(
-<a href=#1450 id=1450 data-nosnippet>1450</a> <span class="string">"j"</span>,
-<a href=#1451 id=1451 data-nosnippet>1451</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"UTC"</span>.into())),
-<a href=#1452 id=1452 data-nosnippet>1452</a> <span class="bool-val">false</span>,
-<a href=#1453 id=1453 data-nosnippet>1453</a> <span class="string">"10"</span>,
-<a href=#1454 id=1454 data-nosnippet>1454</a> ),
-<a href=#1455 id=1455 data-nosnippet>1455</a> simple_field(
-<a href=#1456 id=1456 data-nosnippet>1456</a> <span class="string">"k"</span>,
-<a href=#1457 id=1457 data-nosnippet>1457</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
-<a href=#1458 id=1458 data-nosnippet>1458</a> <span class="bool-val">false</span>,
-<a href=#1459 id=1459 data-nosnippet>1459</a> <span class="string">"12"</span>,
-<a href=#1460 id=1460 data-nosnippet>1460</a> ),
-<a href=#1461 id=1461 data-nosnippet>1461</a> simple_field(<span class="string">"l"</span>, DataType::Binary, <span class="bool-val">false</span>, <span class="string">"13"</span>),
-<a href=#1462 id=1462 data-nosnippet>1462</a> simple_field(<span class="string">"o"</span>, DataType::LargeBinary, <span class="bool-val">false</span>, <span class="string">"22"</span>),
-<a href=#1463 id=1463 data-nosnippet>1463</a> simple_field(<span class="string">"m"</span>, DataType::FixedSizeBinary(<span class="number">10</span>), <span class="bool-val">false</span>, <span class="string">"11"</span>),
-<a href=#1464 id=1464 data-nosnippet>1464</a> simple_field(
-<a href=#1465 id=1465 data-nosnippet>1465</a> <span class="string">"list"</span>,
-<a href=#1466 id=1466 data-nosnippet>1466</a> DataType::List(Arc::new(simple_field(
-<a href=#1467 id=1467 data-nosnippet>1467</a> <span class="string">"element"</span>,
-<a href=#1468 id=1468 data-nosnippet>1468</a> DataType::Int32,
-<a href=#1469 id=1469 data-nosnippet>1469</a> <span class="bool-val">false</span>,
-<a href=#1470 id=1470 data-nosnippet>1470</a> <span class="string">"15"</span>,
-<a href=#1471 id=1471 data-nosnippet>1471</a> ))),
-<a href=#1472 id=1472 data-nosnippet>1472</a> <span class="bool-val">true</span>,
-<a href=#1473 id=1473 data-nosnippet>1473</a> <span class="string">"14"</span>,
-<a href=#1474 id=1474 data-nosnippet>1474</a> ),
-<a href=#1475 id=1475 data-nosnippet>1475</a> simple_field(
-<a href=#1476 id=1476 data-nosnippet>1476</a> <span class="string">"large_list"</span>,
-<a href=#1477 id=1477 data-nosnippet>1477</a> DataType::LargeList(Arc::new(simple_field(
-<a href=#1478 id=1478 data-nosnippet>1478</a> <span class="string">"element"</span>,
-<a href=#1479 id=1479 data-nosnippet>1479</a> DataType::Utf8,
-<a href=#1480 id=1480 data-nosnippet>1480</a> <span class="bool-val">false</span>,
-<a href=#1481 id=1481 data-nosnippet>1481</a> <span class="string">"23"</span>,
-<a href=#1482 id=1482 data-nosnippet>1482</a> ))),
+<a href=#1430 id=1430 data-nosnippet>1430</a><span class="attr">#[cfg(test)]
+<a href=#1431 id=1431 data-nosnippet>1431</a></span><span class="kw">mod </span>tests {
+<a href=#1432 id=1432 data-nosnippet>1432</a> <span class="kw">use </span>std::collections::HashMap;
+<a href=#1433 id=1433 data-nosnippet>1433</a> <span class="kw">use </span>std::sync::Arc;
+<a href=#1434 id=1434 data-nosnippet>1434</a>
+<a href=#1435 id=1435 data-nosnippet>1435</a> <span class="kw">use </span>arrow_schema::{DataType, Field, Schema <span class="kw">as </span>ArrowSchema, TimeUnit};
+<a href=#1436 id=1436 data-nosnippet>1436</a>
+<a href=#1437 id=1437 data-nosnippet>1437</a> <span class="kw">use </span>super::<span class="kw-2">*</span>;
+<a href=#1438 id=1438 data-nosnippet>1438</a> <span class="kw">use </span><span class="kw">crate</span>::spec::decimal_utils::decimal_new;
+<a href=#1439 id=1439 data-nosnippet>1439</a> <span class="kw">use </span><span class="kw">crate</span>::spec::{Literal, Schema};
+<a href=#1440 id=1440 data-nosnippet>1440</a>
+<a href=#1441 id=1441 data-nosnippet>1441</a> <span class="doccomment">/// Create a simple field with metadata.
+<a href=#1442 id=1442 data-nosnippet>1442</a> </span><span class="kw">fn </span>simple_field(name: <span class="kw-2">&</span>str, ty: DataType, nullable: bool, value: <span class="kw-2">&</span>str) -> Field {
+<a href=#1443 id=1443 data-nosnippet>1443</a> Field::new(name, ty, nullable).with_metadata(HashMap::from([(
+<a href=#1444 id=1444 data-nosnippet>1444</a> PARQUET_FIELD_ID_META_KEY.to_string(),
+<a href=#1445 id=1445 data-nosnippet>1445</a> value.to_string(),
+<a href=#1446 id=1446 data-nosnippet>1446</a> )]))
+<a href=#1447 id=1447 data-nosnippet>1447</a> }
+<a href=#1448 id=1448 data-nosnippet>1448</a>
+<a href=#1449 id=1449 data-nosnippet>1449</a> <span class="kw">fn </span>arrow_schema_for_arrow_schema_to_schema_test() -> ArrowSchema {
+<a href=#1450 id=1450 data-nosnippet>1450</a> <span class="kw">let </span>fields = Fields::from(<span class="macro">vec!</span>[
+<a href=#1451 id=1451 data-nosnippet>1451</a> simple_field(<span class="string">"key"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"28"</span>),
+<a href=#1452 id=1452 data-nosnippet>1452</a> simple_field(<span class="string">"value"</span>, DataType::Utf8, <span class="bool-val">true</span>, <span class="string">"29"</span>),
+<a href=#1453 id=1453 data-nosnippet>1453</a> ]);
+<a href=#1454 id=1454 data-nosnippet>1454</a>
+<a href=#1455 id=1455 data-nosnippet>1455</a> <span class="kw">let </span>r#struct = DataType::Struct(fields);
+<a href=#1456 id=1456 data-nosnippet>1456</a> <span class="kw">let </span>map = DataType::Map(
+<a href=#1457 id=1457 data-nosnippet>1457</a> Arc::new(simple_field(DEFAULT_MAP_FIELD_NAME, r#struct, <span class="bool-val">false</span>, <span class="string">"17"</span>)),
+<a href=#1458 id=1458 data-nosnippet>1458</a> <span class="bool-val">false</span>,
+<a href=#1459 id=1459 data-nosnippet>1459</a> );
+<a href=#1460 id=1460 data-nosnippet>1460</a> <span class="kw">let </span>dictionary = DataType::Dictionary(Box::new(DataType::Int32), Box::new(DataType::Utf8));
+<a href=#1461 id=1461 data-nosnippet>1461</a>
+<a href=#1462 id=1462 data-nosnippet>1462</a> <span class="kw">let </span>fields = Fields::from(<span class="macro">vec!</span>[
+<a href=#1463 id=1463 data-nosnippet>1463</a> simple_field(<span class="string">"aa"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"18"</span>),
+<a href=#1464 id=1464 data-nosnippet>1464</a> simple_field(<span class="string">"bb"</span>, DataType::Utf8, <span class="bool-val">true</span>, <span class="string">"19"</span>),
+<a href=#1465 id=1465 data-nosnippet>1465</a> simple_field(
+<a href=#1466 id=1466 data-nosnippet>1466</a> <span class="string">"cc"</span>,
+<a href=#1467 id=1467 data-nosnippet>1467</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">None</span>),
+<a href=#1468 id=1468 data-nosnippet>1468</a> <span class="bool-val">false</span>,
+<a href=#1469 id=1469 data-nosnippet>1469</a> <span class="string">"20"</span>,
+<a href=#1470 id=1470 data-nosnippet>1470</a> ),
+<a href=#1471 id=1471 data-nosnippet>1471</a> ]);
+<a href=#1472 id=1472 data-nosnippet>1472</a>
+<a href=#1473 id=1473 data-nosnippet>1473</a> <span class="kw">let </span>r#struct = DataType::Struct(fields);
+<a href=#1474 id=1474 data-nosnippet>1474</a>
+<a href=#1475 id=1475 data-nosnippet>1475</a> ArrowSchema::new(<span class="macro">vec!</span>[
+<a href=#1476 id=1476 data-nosnippet>1476</a> simple_field(<span class="string">"a"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"2"</span>),
+<a href=#1477 id=1477 data-nosnippet>1477</a> simple_field(<span class="string">"b"</span>, DataType::Int64, <span class="bool-val">false</span>, <span class="string">"1"</span>),
+<a href=#1478 id=1478 data-nosnippet>1478</a> simple_field(<span class="string">"c"</span>, DataType::Utf8, <span class="bool-val">false</span>, <span class="string">"3"</span>),
+<a href=#1479 id=1479 data-nosnippet>1479</a> simple_field(<span class="string">"n"</span>, DataType::Utf8, <span class="bool-val">false</span>, <span class="string">"21"</span>),
+<a href=#1480 id=1480 data-nosnippet>1480</a> simple_field(
+<a href=#1481 id=1481 data-nosnippet>1481</a> <span class="string">"d"</span>,
+<a href=#1482 id=1482 data-nosnippet>1482</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">None</span>),
<a href=#1483 id=1483 data-nosnippet>1483</a> <span class="bool-val">true</span>,
-<a href=#1484 id=1484 data-nosnippet>1484</a> <span class="string">"24"</span>,
+<a href=#1484 id=1484 data-nosnippet>1484</a> <span class="string">"4"</span>,
<a href=#1485 id=1485 data-nosnippet>1485</a> ),
-<a href=#1486 id=1486 data-nosnippet>1486</a> simple_field(
-<a href=#1487 id=1487 data-nosnippet>1487</a> <span class="string">"fixed_list"</span>,
-<a href=#1488 id=1488 data-nosnippet>1488</a> DataType::FixedSizeList(
-<a href=#1489 id=1489 data-nosnippet>1489</a> Arc::new(simple_field(<span class="string">"element"</span>, DataType::Binary, <span class="bool-val">false</span>, <span class="string">"26"</span>)),
-<a href=#1490 id=1490 data-nosnippet>1490</a> <span class="number">10</span>,
-<a href=#1491 id=1491 data-nosnippet>1491</a> ),
-<a href=#1492 id=1492 data-nosnippet>1492</a> <span class="bool-val">true</span>,
-<a href=#1493 id=1493 data-nosnippet>1493</a> <span class="string">"25"</span>,
-<a href=#1494 id=1494 data-nosnippet>1494</a> ),
-<a href=#1495 id=1495 data-nosnippet>1495</a> simple_field(<span class="string">"map"</span>, map, <span class="bool-val">false</span>, <span class="string">"16"</span>),
-<a href=#1496 id=1496 data-nosnippet>1496</a> simple_field(<span class="string">"struct"</span>, r#struct, <span class="bool-val">false</span>, <span class="string">"17"</span>),
-<a href=#1497 id=1497 data-nosnippet>1497</a> simple_field(<span class="string">"dictionary"</span>, dictionary, <span class="bool-val">false</span>, <span class="string">"30"</span>),
-<a href=#1498 id=1498 data-nosnippet>1498</a> ])
-<a href=#1499 id=1499 data-nosnippet>1499</a> }
-<a href=#1500 id=1500 data-nosnippet>1500</a>
-<a href=#1501 id=1501 data-nosnippet>1501</a> <span class="kw">fn </span>iceberg_schema_for_arrow_schema_to_schema_test() -> Schema {
-<a href=#1502 id=1502 data-nosnippet>1502</a> <span class="kw">let </span>schema_json = <span class="string">r#"{
-<a href=#1503 id=1503 data-nosnippet>1503</a> "type":"struct",
-<a href=#1504 id=1504 data-nosnippet>1504</a> "schema-id":0,
-<a href=#1505 id=1505 data-nosnippet>1505</a> "fields":[
-<a href=#1506 id=1506 data-nosnippet>1506</a> {
-<a href=#1507 id=1507 data-nosnippet>1507</a> "id":2,
-<a href=#1508 id=1508 data-nosnippet>1508</a> "name":"a",
-<a href=#1509 id=1509 data-nosnippet>1509</a> "required":true,
-<a href=#1510 id=1510 data-nosnippet>1510</a> "type":"int"
-<a href=#1511 id=1511 data-nosnippet>1511</a> },
-<a href=#1512 id=1512 data-nosnippet>1512</a> {
-<a href=#1513 id=1513 data-nosnippet>1513</a> "id":1,
-<a href=#1514 id=1514 data-nosnippet>1514</a> "name":"b",
-<a href=#1515 id=1515 data-nosnippet>1515</a> "required":true,
-<a href=#1516 id=1516 data-nosnippet>1516</a> "type":"long"
-<a href=#1517 id=1517 data-nosnippet>1517</a> },
-<a href=#1518 id=1518 data-nosnippet>1518</a> {
-<a href=#1519 id=1519 data-nosnippet>1519</a> "id":3,
-<a href=#1520 id=1520 data-nosnippet>1520</a> "name":"c",
-<a href=#1521 id=1521 data-nosnippet>1521</a> "required":true,
-<a href=#1522 id=1522 data-nosnippet>1522</a> "type":"string"
-<a href=#1523 id=1523 data-nosnippet>1523</a> },
-<a href=#1524 id=1524 data-nosnippet>1524</a> {
-<a href=#1525 id=1525 data-nosnippet>1525</a> "id":21,
-<a href=#1526 id=1526 data-nosnippet>1526</a> "name":"n",
-<a href=#1527 id=1527 data-nosnippet>1527</a> "required":true,
-<a href=#1528 id=1528 data-nosnippet>1528</a> "type":"string"
-<a href=#1529 id=1529 data-nosnippet>1529</a> },
-<a href=#1530 id=1530 data-nosnippet>1530</a> {
-<a href=#1531 id=1531 data-nosnippet>1531</a> "id":4,
-<a href=#1532 id=1532 data-nosnippet>1532</a> "name":"d",
-<a href=#1533 id=1533 data-nosnippet>1533</a> "required":false,
-<a href=#1534 id=1534 data-nosnippet>1534</a> "type":"timestamp"
-<a href=#1535 id=1535 data-nosnippet>1535</a> },
-<a href=#1536 id=1536 data-nosnippet>1536</a> {
-<a href=#1537 id=1537 data-nosnippet>1537</a> "id":6,
-<a href=#1538 id=1538 data-nosnippet>1538</a> "name":"e",
-<a href=#1539 id=1539 data-nosnippet>1539</a> "required":false,
-<a href=#1540 id=1540 data-nosnippet>1540</a> "type":"boolean"
-<a href=#1541 id=1541 data-nosnippet>1541</a> },
-<a href=#1542 id=1542 data-nosnippet>1542</a> {
-<a href=#1543 id=1543 data-nosnippet>1543</a> "id":5,
-<a href=#1544 id=1544 data-nosnippet>1544</a> "name":"f",
-<a href=#1545 id=1545 data-nosnippet>1545</a> "required":true,
-<a href=#1546 id=1546 data-nosnippet>1546</a> "type":"float"
-<a href=#1547 id=1547 data-nosnippet>1547</a> },
-<a href=#1548 id=1548 data-nosnippet>1548</a> {
-<a href=#1549 id=1549 data-nosnippet>1549</a> "id":7,
-<a href=#1550 id=1550 data-nosnippet>1550</a> "name":"g",
-<a href=#1551 id=1551 data-nosnippet>1551</a> "required":true,
-<a href=#1552 id=1552 data-nosnippet>1552</a> "type":"double"
-<a href=#1553 id=1553 data-nosnippet>1553</a> },
-<a href=#1554 id=1554 data-nosnippet>1554</a> {
-<a href=#1555 id=1555 data-nosnippet>1555</a> "id":27,
-<a href=#1556 id=1556 data-nosnippet>1556</a> "name":"p",
-<a href=#1557 id=1557 data-nosnippet>1557</a> "required":true,
-<a href=#1558 id=1558 data-nosnippet>1558</a> "type":"decimal(10,2)"
-<a href=#1559 id=1559 data-nosnippet>1559</a> },
-<a href=#1560 id=1560 data-nosnippet>1560</a> {
-<a href=#1561 id=1561 data-nosnippet>1561</a> "id":8,
-<a href=#1562 id=1562 data-nosnippet>1562</a> "name":"h",
-<a href=#1563 id=1563 data-nosnippet>1563</a> "required":true,
-<a href=#1564 id=1564 data-nosnippet>1564</a> "type":"date"
-<a href=#1565 id=1565 data-nosnippet>1565</a> },
-<a href=#1566 id=1566 data-nosnippet>1566</a> {
-<a href=#1567 id=1567 data-nosnippet>1567</a> "id":9,
-<a href=#1568 id=1568 data-nosnippet>1568</a> "name":"i",
-<a href=#1569 id=1569 data-nosnippet>1569</a> "required":true,
-<a href=#1570 id=1570 data-nosnippet>1570</a> "type":"time"
-<a href=#1571 id=1571 data-nosnippet>1571</a> },
-<a href=#1572 id=1572 data-nosnippet>1572</a> {
-<a href=#1573 id=1573 data-nosnippet>1573</a> "id":10,
-<a href=#1574 id=1574 data-nosnippet>1574</a> "name":"j",
-<a href=#1575 id=1575 data-nosnippet>1575</a> "required":true,
-<a href=#1576 id=1576 data-nosnippet>1576</a> "type":"timestamptz"
-<a href=#1577 id=1577 data-nosnippet>1577</a> },
-<a href=#1578 id=1578 data-nosnippet>1578</a> {
-<a href=#1579 id=1579 data-nosnippet>1579</a> "id":12,
-<a href=#1580 id=1580 data-nosnippet>1580</a> "name":"k",
-<a href=#1581 id=1581 data-nosnippet>1581</a> "required":true,
-<a href=#1582 id=1582 data-nosnippet>1582</a> "type":"timestamptz"
-<a href=#1583 id=1583 data-nosnippet>1583</a> },
-<a href=#1584 id=1584 data-nosnippet>1584</a> {
-<a href=#1585 id=1585 data-nosnippet>1585</a> "id":13,
-<a href=#1586 id=1586 data-nosnippet>1586</a> "name":"l",
-<a href=#1587 id=1587 data-nosnippet>1587</a> "required":true,
-<a href=#1588 id=1588 data-nosnippet>1588</a> "type":"binary"
-<a href=#1589 id=1589 data-nosnippet>1589</a> },
-<a href=#1590 id=1590 data-nosnippet>1590</a> {
-<a href=#1591 id=1591 data-nosnippet>1591</a> "id":22,
-<a href=#1592 id=1592 data-nosnippet>1592</a> "name":"o",
-<a href=#1593 id=1593 data-nosnippet>1593</a> "required":true,
-<a href=#1594 id=1594 data-nosnippet>1594</a> "type":"binary"
-<a href=#1595 id=1595 data-nosnippet>1595</a> },
-<a href=#1596 id=1596 data-nosnippet>1596</a> {
-<a href=#1597 id=1597 data-nosnippet>1597</a> "id":11,
-<a href=#1598 id=1598 data-nosnippet>1598</a> "name":"m",
-<a href=#1599 id=1599 data-nosnippet>1599</a> "required":true,
-<a href=#1600 id=1600 data-nosnippet>1600</a> "type":"fixed[10]"
-<a href=#1601 id=1601 data-nosnippet>1601</a> },
-<a href=#1602 id=1602 data-nosnippet>1602</a> {
-<a href=#1603 id=1603 data-nosnippet>1603</a> "id":14,
-<a href=#1604 id=1604 data-nosnippet>1604</a> "name":"list",
-<a href=#1605 id=1605 data-nosnippet>1605</a> "required": false,
-<a href=#1606 id=1606 data-nosnippet>1606</a> "type": {
-<a href=#1607 id=1607 data-nosnippet>1607</a> "type": "list",
-<a href=#1608 id=1608 data-nosnippet>1608</a> "element-id": 15,
-<a href=#1609 id=1609 data-nosnippet>1609</a> "element-required": true,
-<a href=#1610 id=1610 data-nosnippet>1610</a> "element": "int"
-<a href=#1611 id=1611 data-nosnippet>1611</a> }
-<a href=#1612 id=1612 data-nosnippet>1612</a> },
-<a href=#1613 id=1613 data-nosnippet>1613</a> {
-<a href=#1614 id=1614 data-nosnippet>1614</a> "id":24,
-<a href=#1615 id=1615 data-nosnippet>1615</a> "name":"large_list",
-<a href=#1616 id=1616 data-nosnippet>1616</a> "required": false,
-<a href=#1617 id=1617 data-nosnippet>1617</a> "type": {
-<a href=#1618 id=1618 data-nosnippet>1618</a> "type": "list",
-<a href=#1619 id=1619 data-nosnippet>1619</a> "element-id": 23,
-<a href=#1620 id=1620 data-nosnippet>1620</a> "element-required": true,
-<a href=#1621 id=1621 data-nosnippet>1621</a> "element": "string"
-<a href=#1622 id=1622 data-nosnippet>1622</a> }
-<a href=#1623 id=1623 data-nosnippet>1623</a> },
-<a href=#1624 id=1624 data-nosnippet>1624</a> {
-<a href=#1625 id=1625 data-nosnippet>1625</a> "id":25,
-<a href=#1626 id=1626 data-nosnippet>1626</a> "name":"fixed_list",
-<a href=#1627 id=1627 data-nosnippet>1627</a> "required": false,
-<a href=#1628 id=1628 data-nosnippet>1628</a> "type": {
-<a href=#1629 id=1629 data-nosnippet>1629</a> "type": "list",
-<a href=#1630 id=1630 data-nosnippet>1630</a> "element-id": 26,
-<a href=#1631 id=1631 data-nosnippet>1631</a> "element-required": true,
-<a href=#1632 id=1632 data-nosnippet>1632</a> "element": "binary"
-<a href=#1633 id=1633 data-nosnippet>1633</a> }
-<a href=#1634 id=1634 data-nosnippet>1634</a> },
-<a href=#1635 id=1635 data-nosnippet>1635</a> {
-<a href=#1636 id=1636 data-nosnippet>1636</a> "id":16,
-<a href=#1637 id=1637 data-nosnippet>1637</a> "name":"map",
-<a href=#1638 id=1638 data-nosnippet>1638</a> "required": true,
-<a href=#1639 id=1639 data-nosnippet>1639</a> "type": {
-<a href=#1640 id=1640 data-nosnippet>1640</a> "type": "map",
-<a href=#1641 id=1641 data-nosnippet>1641</a> "key-id": 28,
-<a href=#1642 id=1642 data-nosnippet>1642</a> "key": "int",
-<a href=#1643 id=1643 data-nosnippet>1643</a> "value-id": 29,
-<a href=#1644 id=1644 data-nosnippet>1644</a> "value-required": false,
-<a href=#1645 id=1645 data-nosnippet>1645</a> "value": "string"
-<a href=#1646 id=1646 data-nosnippet>1646</a> }
-<a href=#1647 id=1647 data-nosnippet>1647</a> },
-<a href=#1648 id=1648 data-nosnippet>1648</a> {
-<a href=#1649 id=1649 data-nosnippet>1649</a> "id":17,
-<a href=#1650 id=1650 data-nosnippet>1650</a> "name":"struct",
-<a href=#1651 id=1651 data-nosnippet>1651</a> "required": true,
-<a href=#1652 id=1652 data-nosnippet>1652</a> "type": {
-<a href=#1653 id=1653 data-nosnippet>1653</a> "type": "struct",
-<a href=#1654 id=1654 data-nosnippet>1654</a> "fields": [
-<a href=#1655 id=1655 data-nosnippet>1655</a> {
-<a href=#1656 id=1656 data-nosnippet>1656</a> "id":18,
-<a href=#1657 id=1657 data-nosnippet>1657</a> "name":"aa",
-<a href=#1658 id=1658 data-nosnippet>1658</a> "required":true,
-<a href=#1659 id=1659 data-nosnippet>1659</a> "type":"int"
-<a href=#1660 id=1660 data-nosnippet>1660</a> },
-<a href=#1661 id=1661 data-nosnippet>1661</a> {
-<a href=#1662 id=1662 data-nosnippet>1662</a> "id":19,
-<a href=#1663 id=1663 data-nosnippet>1663</a> "name":"bb",
-<a href=#1664 id=1664 data-nosnippet>1664</a> "required":false,
-<a href=#1665 id=1665 data-nosnippet>1665</a> "type":"string"
-<a href=#1666 id=1666 data-nosnippet>1666</a> },
-<a href=#1667 id=1667 data-nosnippet>1667</a> {
-<a href=#1668 id=1668 data-nosnippet>1668</a> "id":20,
-<a href=#1669 id=1669 data-nosnippet>1669</a> "name":"cc",
-<a href=#1670 id=1670 data-nosnippet>1670</a> "required":true,
-<a href=#1671 id=1671 data-nosnippet>1671</a> "type":"timestamp"
-<a href=#1672 id=1672 data-nosnippet>1672</a> }
-<a href=#1673 id=1673 data-nosnippet>1673</a> ]
-<a href=#1674 id=1674 data-nosnippet>1674</a> }
-<a href=#1675 id=1675 data-nosnippet>1675</a> },
-<a href=#1676 id=1676 data-nosnippet>1676</a> {
-<a href=#1677 id=1677 data-nosnippet>1677</a> "id":30,
-<a href=#1678 id=1678 data-nosnippet>1678</a> "name":"dictionary",
-<a href=#1679 id=1679 data-nosnippet>1679</a> "required":true,
-<a href=#1680 id=1680 data-nosnippet>1680</a> "type":"string"
-<a href=#1681 id=1681 data-nosnippet>1681</a> }
-<a href=#1682 id=1682 data-nosnippet>1682</a> ],
-<a href=#1683 id=1683 data-nosnippet>1683</a> "identifier-field-ids":[]
-<a href=#1684 id=1684 data-nosnippet>1684</a> }"#</span>;
-<a href=#1685 id=1685 data-nosnippet>1685</a>
-<a href=#1686 id=1686 data-nosnippet>1686</a> <span class="kw">let </span>schema: Schema = serde_json::from_str(schema_json).unwrap();
-<a href=#1687 id=1687 data-nosnippet>1687</a> schema
-<a href=#1688 id=1688 data-nosnippet>1688</a> }
-<a href=#1689 id=1689 data-nosnippet>1689</a>
-<a href=#1690 id=1690 data-nosnippet>1690</a> <span class="attr">#[test]
-<a href=#1691 id=1691 data-nosnippet>1691</a> </span><span class="kw">fn </span>test_arrow_schema_to_schema() {
-<a href=#1692 id=1692 data-nosnippet>1692</a> <span class="kw">let </span>arrow_schema = arrow_schema_for_arrow_schema_to_schema_test();
-<a href=#1693 id=1693 data-nosnippet>1693</a> <span class="kw">let </span>schema = iceberg_schema_for_arrow_schema_to_schema_test();
-<a href=#1694 id=1694 data-nosnippet>1694</a> <span class="kw">let </span>converted_schema = arrow_schema_to_schema(<span class="kw-2">&</span>arrow_schema).unwrap();
-<a href=#1695 id=1695 data-nosnippet>1695</a> <span class="macro">pretty_assertions::assert_eq!</span>(converted_schema, schema);
-<a href=#1696 id=1696 data-nosnippet>1696</a> }
-<a href=#1697 id=1697 data-nosnippet>1697</a>
-<a href=#1698 id=1698 data-nosnippet>1698</a> <span class="kw">fn </span>arrow_schema_for_schema_to_arrow_schema_test() -> ArrowSchema {
-<a href=#1699 id=1699 data-nosnippet>1699</a> <span class="kw">let </span>fields = Fields::from(<span class="macro">vec!</span>[
-<a href=#1700 id=1700 data-nosnippet>1700</a> simple_field(<span class="string">"key"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"28"</span>),
-<a href=#1701 id=1701 data-nosnippet>1701</a> simple_field(<span class="string">"value"</span>, DataType::Utf8, <span class="bool-val">true</span>, <span class="string">"29"</span>),
-<a href=#1702 id=1702 data-nosnippet>1702</a> ]);
-<a href=#1703 id=1703 data-nosnippet>1703</a>
-<a href=#1704 id=1704 data-nosnippet>1704</a> <span class="kw">let </span>r#struct = DataType::Struct(fields);
-<a href=#1705 id=1705 data-nosnippet>1705</a> <span class="kw">let </span>map = DataType::Map(
-<a href=#1706 id=1706 data-nosnippet>1706</a> Arc::new(Field::new(DEFAULT_MAP_FIELD_NAME, r#struct, <span class="bool-val">false</span>)),
-<a href=#1707 id=1707 data-nosnippet>1707</a> <span class="bool-val">false</span>,
-<a href=#1708 id=1708 data-nosnippet>1708</a> );
-<a href=#1709 id=1709 data-nosnippet>1709</a>
-<a href=#1710 id=1710 data-nosnippet>1710</a> <span class="kw">let </span>fields = Fields::from(<span class="macro">vec!</span>[
-<a href=#1711 id=1711 data-nosnippet>1711</a> simple_field(<span class="string">"aa"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"18"</span>),
-<a href=#1712 id=1712 data-nosnippet>1712</a> simple_field(<span class="string">"bb"</span>, DataType::Utf8, <span class="bool-val">true</span>, <span class="string">"19"</span>),
-<a href=#1713 id=1713 data-nosnippet>1713</a> simple_field(
-<a href=#1714 id=1714 data-nosnippet>1714</a> <span class="string">"cc"</span>,
-<a href=#1715 id=1715 data-nosnippet>1715</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">None</span>),
-<a href=#1716 id=1716 data-nosnippet>1716</a> <span class="bool-val">false</span>,
-<a href=#1717 id=1717 data-nosnippet>1717</a> <span class="string">"20"</span>,
-<a href=#1718 id=1718 data-nosnippet>1718</a> ),
-<a href=#1719 id=1719 data-nosnippet>1719</a> ]);
-<a href=#1720 id=1720 data-nosnippet>1720</a>
-<a href=#1721 id=1721 data-nosnippet>1721</a> <span class="kw">let </span>r#struct = DataType::Struct(fields);
-<a href=#1722 id=1722 data-nosnippet>1722</a>
-<a href=#1723 id=1723 data-nosnippet>1723</a> ArrowSchema::new(<span class="macro">vec!</span>[
-<a href=#1724 id=1724 data-nosnippet>1724</a> simple_field(<span class="string">"a"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"2"</span>),
-<a href=#1725 id=1725 data-nosnippet>1725</a> simple_field(<span class="string">"b"</span>, DataType::Int64, <span class="bool-val">false</span>, <span class="string">"1"</span>),
-<a href=#1726 id=1726 data-nosnippet>1726</a> simple_field(<span class="string">"c"</span>, DataType::Utf8, <span class="bool-val">false</span>, <span class="string">"3"</span>),
-<a href=#1727 id=1727 data-nosnippet>1727</a> simple_field(<span class="string">"n"</span>, DataType::Utf8, <span class="bool-val">false</span>, <span class="string">"21"</span>),
-<a href=#1728 id=1728 data-nosnippet>1728</a> simple_field(
-<a href=#1729 id=1729 data-nosnippet>1729</a> <span class="string">"d"</span>,
-<a href=#1730 id=1730 data-nosnippet>1730</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">None</span>),
-<a href=#1731 id=1731 data-nosnippet>1731</a> <span class="bool-val">true</span>,
-<a href=#1732 id=1732 data-nosnippet>1732</a> <span class="string">"4"</span>,
-<a href=#1733 id=1733 data-nosnippet>1733</a> ),
-<a href=#1734 id=1734 data-nosnippet>1734</a> simple_field(<span class="string">"e"</span>, DataType::Boolean, <span class="bool-val">true</span>, <span class="string">"6"</span>),
-<a href=#1735 id=1735 data-nosnippet>1735</a> simple_field(<span class="string">"f"</span>, DataType::Float32, <span class="bool-val">false</span>, <span class="string">"5"</span>),
-<a href=#1736 id=1736 data-nosnippet>1736</a> simple_field(<span class="string">"g"</span>, DataType::Float64, <span class="bool-val">false</span>, <span class="string">"7"</span>),
-<a href=#1737 id=1737 data-nosnippet>1737</a> simple_field(<span class="string">"p"</span>, DataType::Decimal128(<span class="number">10</span>, <span class="number">2</span>), <span class="bool-val">false</span>, <span class="string">"27"</span>),
-<a href=#1738 id=1738 data-nosnippet>1738</a> simple_field(<span class="string">"h"</span>, DataType::Date32, <span class="bool-val">false</span>, <span class="string">"8"</span>),
-<a href=#1739 id=1739 data-nosnippet>1739</a> simple_field(<span class="string">"i"</span>, DataType::Time64(TimeUnit::Microsecond), <span class="bool-val">false</span>, <span class="string">"9"</span>),
-<a href=#1740 id=1740 data-nosnippet>1740</a> simple_field(
-<a href=#1741 id=1741 data-nosnippet>1741</a> <span class="string">"j"</span>,
-<a href=#1742 id=1742 data-nosnippet>1742</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
-<a href=#1743 id=1743 data-nosnippet>1743</a> <span class="bool-val">false</span>,
-<a href=#1744 id=1744 data-nosnippet>1744</a> <span class="string">"10"</span>,
-<a href=#1745 id=1745 data-nosnippet>1745</a> ),
-<a href=#1746 id=1746 data-nosnippet>1746</a> simple_field(
-<a href=#1747 id=1747 data-nosnippet>1747</a> <span class="string">"k"</span>,
-<a href=#1748 id=1748 data-nosnippet>1748</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
-<a href=#1749 id=1749 data-nosnippet>1749</a> <span class="bool-val">false</span>,
-<a href=#1750 id=1750 data-nosnippet>1750</a> <span class="string">"12"</span>,
-<a href=#1751 id=1751 data-nosnippet>1751</a> ),
-<a href=#1752 id=1752 data-nosnippet>1752</a> simple_field(<span class="string">"l"</span>, DataType::LargeBinary, <span class="bool-val">false</span>, <span class="string">"13"</span>),
-<a href=#1753 id=1753 data-nosnippet>1753</a> simple_field(<span class="string">"o"</span>, DataType::LargeBinary, <span class="bool-val">false</span>, <span class="string">"22"</span>),
-<a href=#1754 id=1754 data-nosnippet>1754</a> simple_field(<span class="string">"m"</span>, DataType::FixedSizeBinary(<span class="number">10</span>), <span class="bool-val">false</span>, <span class="string">"11"</span>),
-<a href=#1755 id=1755 data-nosnippet>1755</a> simple_field(
-<a href=#1756 id=1756 data-nosnippet>1756</a> <span class="string">"list"</span>,
-<a href=#1757 id=1757 data-nosnippet>1757</a> DataType::List(Arc::new(simple_field(
-<a href=#1758 id=1758 data-nosnippet>1758</a> <span class="string">"element"</span>,
-<a href=#1759 id=1759 data-nosnippet>1759</a> DataType::Int32,
-<a href=#1760 id=1760 data-nosnippet>1760</a> <span class="bool-val">false</span>,
-<a href=#1761 id=1761 data-nosnippet>1761</a> <span class="string">"15"</span>,
-<a href=#1762 id=1762 data-nosnippet>1762</a> ))),
-<a href=#1763 id=1763 data-nosnippet>1763</a> <span class="bool-val">true</span>,
-<a href=#1764 id=1764 data-nosnippet>1764</a> <span class="string">"14"</span>,
-<a href=#1765 id=1765 data-nosnippet>1765</a> ),
-<a href=#1766 id=1766 data-nosnippet>1766</a> simple_field(
-<a href=#1767 id=1767 data-nosnippet>1767</a> <span class="string">"large_list"</span>,
-<a href=#1768 id=1768 data-nosnippet>1768</a> DataType::List(Arc::new(simple_field(
-<a href=#1769 id=1769 data-nosnippet>1769</a> <span class="string">"element"</span>,
-<a href=#1770 id=1770 data-nosnippet>1770</a> DataType::Utf8,
-<a href=#1771 id=1771 data-nosnippet>1771</a> <span class="bool-val">false</span>,
-<a href=#1772 id=1772 data-nosnippet>1772</a> <span class="string">"23"</span>,
-<a href=#1773 id=1773 data-nosnippet>1773</a> ))),
-<a href=#1774 id=1774 data-nosnippet>1774</a> <span class="bool-val">true</span>,
-<a href=#1775 id=1775 data-nosnippet>1775</a> <span class="string">"24"</span>,
-<a href=#1776 id=1776 data-nosnippet>1776</a> ),
-<a href=#1777 id=1777 data-nosnippet>1777</a> simple_field(
-<a href=#1778 id=1778 data-nosnippet>1778</a> <span class="string">"fixed_list"</span>,
-<a href=#1779 id=1779 data-nosnippet>1779</a> DataType::List(Arc::new(simple_field(
-<a href=#1780 id=1780 data-nosnippet>1780</a> <span class="string">"element"</span>,
-<a href=#1781 id=1781 data-nosnippet>1781</a> DataType::LargeBinary,
-<a href=#1782 id=1782 data-nosnippet>1782</a> <span class="bool-val">false</span>,
-<a href=#1783 id=1783 data-nosnippet>1783</a> <span class="string">"26"</span>,
-<a href=#1784 id=1784 data-nosnippet>1784</a> ))),
-<a href=#1785 id=1785 data-nosnippet>1785</a> <span class="bool-val">true</span>,
-<a href=#1786 id=1786 data-nosnippet>1786</a> <span class="string">"25"</span>,
-<a href=#1787 id=1787 data-nosnippet>1787</a> ),
-<a href=#1788 id=1788 data-nosnippet>1788</a> simple_field(<span class="string">"map"</span>, map, <span class="bool-val">false</span>, <span class="string">"16"</span>),
-<a href=#1789 id=1789 data-nosnippet>1789</a> simple_field(<span class="string">"struct"</span>, r#struct, <span class="bool-val">false</span>, <span class="string">"17"</span>),
-<a href=#1790 id=1790 data-nosnippet>1790</a> simple_field(<span class="string">"uuid"</span>, DataType::FixedSizeBinary(<span class="number">16</span>), <span class="bool-val">false</span>, <span class="string">"30"</span>),
-<a href=#1791 id=1791 data-nosnippet>1791</a> Field::new(
-<a href=#1792 id=1792 data-nosnippet>1792</a> <span class="string">"v"</span>,
-<a href=#1793 id=1793 data-nosnippet>1793</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[
-<a href=#1794 id=1794 data-nosnippet>1794</a> Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>),
-<a href=#1795 id=1795 data-nosnippet>1795</a> Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>),
-<a href=#1796 id=1796 data-nosnippet>1796</a> ])),
-<a href=#1797 id=1797 data-nosnippet>1797</a> <span class="bool-val">true</span>,
-<a href=#1798 id=1798 data-nosnippet>1798</a> )
-<a href=#1799 id=1799 data-nosnippet>1799</a> .with_metadata(HashMap::from([
-<a href=#1800 id=1800 data-nosnippet>1800</a> (PARQUET_FIELD_ID_META_KEY.to_string(), <span class="string">"31"</span>.to_string()),
-<a href=#1801 id=1801 data-nosnippet>1801</a> (
-<a href=#1802 id=1802 data-nosnippet>1802</a> arrow_schema::extension::EXTENSION_TYPE_NAME_KEY.to_string(),
-<a href=#1803 id=1803 data-nosnippet>1803</a> <span class="string">"arrow.parquet.variant"</span>.to_string(),
-<a href=#1804 id=1804 data-nosnippet>1804</a> ),
-<a href=#1805 id=1805 data-nosnippet>1805</a> ])),
-<a href=#1806 id=1806 data-nosnippet>1806</a> ])
-<a href=#1807 id=1807 data-nosnippet>1807</a> }
-<a href=#1808 id=1808 data-nosnippet>1808</a>
-<a href=#1809 id=1809 data-nosnippet>1809</a> <span class="kw">fn </span>iceberg_schema_for_schema_to_arrow_schema() -> Schema {
-<a href=#1810 id=1810 data-nosnippet>1810</a> <span class="kw">let </span>schema_json = <span class="string">r#"{
-<a href=#1811 id=1811 data-nosnippet>1811</a> "type":"struct",
-<a href=#1812 id=1812 data-nosnippet>1812</a> "schema-id":0,
-<a href=#1813 id=1813 data-nosnippet>1813</a> "fields":[
-<a href=#1814 id=1814 data-nosnippet>1814</a> {
-<a href=#1815 id=1815 data-nosnippet>1815</a> "id":2,
-<a href=#1816 id=1816 data-nosnippet>1816</a> "name":"a",
-<a href=#1817 id=1817 data-nosnippet>1817</a> "required":true,
-<a href=#1818 id=1818 data-nosnippet>1818</a> "type":"int"
-<a href=#1819 id=1819 data-nosnippet>1819</a> },
-<a href=#1820 id=1820 data-nosnippet>1820</a> {
-<a href=#1821 id=1821 data-nosnippet>1821</a> "id":1,
-<a href=#1822 id=1822 data-nosnippet>1822</a> "name":"b",
-<a href=#1823 id=1823 data-nosnippet>1823</a> "required":true,
-<a href=#1824 id=1824 data-nosnippet>1824</a> "type":"long"
-<a href=#1825 id=1825 data-nosnippet>1825</a> },
-<a href=#1826 id=1826 data-nosnippet>1826</a> {
-<a href=#1827 id=1827 data-nosnippet>1827</a> "id":3,
-<a href=#1828 id=1828 data-nosnippet>1828</a> "name":"c",
-<a href=#1829 id=1829 data-nosnippet>1829</a> "required":true,
-<a href=#1830 id=1830 data-nosnippet>1830</a> "type":"string"
-<a href=#1831 id=1831 data-nosnippet>1831</a> },
-<a href=#1832 id=1832 data-nosnippet>1832</a> {
-<a href=#1833 id=1833 data-nosnippet>1833</a> "id":21,
-<a href=#1834 id=1834 data-nosnippet>1834</a> "name":"n",
-<a href=#1835 id=1835 data-nosnippet>1835</a> "required":true,
-<a href=#1836 id=1836 data-nosnippet>1836</a> "type":"string"
-<a href=#1837 id=1837 data-nosnippet>1837</a> },
-<a href=#1838 id=1838 data-nosnippet>1838</a> {
-<a href=#1839 id=1839 data-nosnippet>1839</a> "id":4,
-<a href=#1840 id=1840 data-nosnippet>1840</a> "name":"d",
-<a href=#1841 id=1841 data-nosnippet>1841</a> "required":false,
-<a href=#1842 id=1842 data-nosnippet>1842</a> "type":"timestamp"
-<a href=#1843 id=1843 data-nosnippet>1843</a> },
-<a href=#1844 id=1844 data-nosnippet>1844</a> {
-<a href=#1845 id=1845 data-nosnippet>1845</a> "id":6,
-<a href=#1846 id=1846 data-nosnippet>1846</a> "name":"e",
-<a href=#1847 id=1847 data-nosnippet>1847</a> "required":false,
-<a href=#1848 id=1848 data-nosnippet>1848</a> "type":"boolean"
-<a href=#1849 id=1849 data-nosnippet>1849</a> },
-<a href=#1850 id=1850 data-nosnippet>1850</a> {
-<a href=#1851 id=1851 data-nosnippet>1851</a> "id":5,
-<a href=#1852 id=1852 data-nosnippet>1852</a> "name":"f",
-<a href=#1853 id=1853 data-nosnippet>1853</a> "required":true,
-<a href=#1854 id=1854 data-nosnippet>1854</a> "type":"float"
-<a href=#1855 id=1855 data-nosnippet>1855</a> },
-<a href=#1856 id=1856 data-nosnippet>1856</a> {
-<a href=#1857 id=1857 data-nosnippet>1857</a> "id":7,
-<a href=#1858 id=1858 data-nosnippet>1858</a> "name":"g",
-<a href=#1859 id=1859 data-nosnippet>1859</a> "required":true,
-<a href=#1860 id=1860 data-nosnippet>1860</a> "type":"double"
-<a href=#1861 id=1861 data-nosnippet>1861</a> },
-<a href=#1862 id=1862 data-nosnippet>1862</a> {
-<a href=#1863 id=1863 data-nosnippet>1863</a> "id":27,
-<a href=#1864 id=1864 data-nosnippet>1864</a> "name":"p",
-<a href=#1865 id=1865 data-nosnippet>1865</a> "required":true,
-<a href=#1866 id=1866 data-nosnippet>1866</a> "type":"decimal(10,2)"
-<a href=#1867 id=1867 data-nosnippet>1867</a> },
-<a href=#1868 id=1868 data-nosnippet>1868</a> {
-<a href=#1869 id=1869 data-nosnippet>1869</a> "id":8,
-<a href=#1870 id=1870 data-nosnippet>1870</a> "name":"h",
-<a href=#1871 id=1871 data-nosnippet>1871</a> "required":true,
-<a href=#1872 id=1872 data-nosnippet>1872</a> "type":"date"
-<a href=#1873 id=1873 data-nosnippet>1873</a> },
-<a href=#1874 id=1874 data-nosnippet>1874</a> {
-<a href=#1875 id=1875 data-nosnippet>1875</a> "id":9,
-<a href=#1876 id=1876 data-nosnippet>1876</a> "name":"i",
-<a href=#1877 id=1877 data-nosnippet>1877</a> "required":true,
-<a href=#1878 id=1878 data-nosnippet>1878</a> "type":"time"
-<a href=#1879 id=1879 data-nosnippet>1879</a> },
-<a href=#1880 id=1880 data-nosnippet>1880</a> {
-<a href=#1881 id=1881 data-nosnippet>1881</a> "id":10,
-<a href=#1882 id=1882 data-nosnippet>1882</a> "name":"j",
-<a href=#1883 id=1883 data-nosnippet>1883</a> "required":true,
-<a href=#1884 id=1884 data-nosnippet>1884</a> "type":"timestamptz"
-<a href=#1885 id=1885 data-nosnippet>1885</a> },
-<a href=#1886 id=1886 data-nosnippet>1886</a> {
-<a href=#1887 id=1887 data-nosnippet>1887</a> "id":12,
-<a href=#1888 id=1888 data-nosnippet>1888</a> "name":"k",
-<a href=#1889 id=1889 data-nosnippet>1889</a> "required":true,
-<a href=#1890 id=1890 data-nosnippet>1890</a> "type":"timestamptz"
-<a href=#1891 id=1891 data-nosnippet>1891</a> },
-<a href=#1892 id=1892 data-nosnippet>1892</a> {
-<a href=#1893 id=1893 data-nosnippet>1893</a> "id":13,
-<a href=#1894 id=1894 data-nosnippet>1894</a> "name":"l",
-<a href=#1895 id=1895 data-nosnippet>1895</a> "required":true,
-<a href=#1896 id=1896 data-nosnippet>1896</a> "type":"binary"
-<a href=#1897 id=1897 data-nosnippet>1897</a> },
-<a href=#1898 id=1898 data-nosnippet>1898</a> {
-<a href=#1899 id=1899 data-nosnippet>1899</a> "id":22,
-<a href=#1900 id=1900 data-nosnippet>1900</a> "name":"o",
-<a href=#1901 id=1901 data-nosnippet>1901</a> "required":true,
-<a href=#1902 id=1902 data-nosnippet>1902</a> "type":"binary"
-<a href=#1903 id=1903 data-nosnippet>1903</a> },
-<a href=#1904 id=1904 data-nosnippet>1904</a> {
-<a href=#1905 id=1905 data-nosnippet>1905</a> "id":11,
-<a href=#1906 id=1906 data-nosnippet>1906</a> "name":"m",
-<a href=#1907 id=1907 data-nosnippet>1907</a> "required":true,
-<a href=#1908 id=1908 data-nosnippet>1908</a> "type":"fixed[10]"
-<a href=#1909 id=1909 data-nosnippet>1909</a> },
-<a href=#1910 id=1910 data-nosnippet>1910</a> {
-<a href=#1911 id=1911 data-nosnippet>1911</a> "id":14,
-<a href=#1912 id=1912 data-nosnippet>1912</a> "name":"list",
-<a href=#1913 id=1913 data-nosnippet>1913</a> "required": false,
-<a href=#1914 id=1914 data-nosnippet>1914</a> "type": {
-<a href=#1915 id=1915 data-nosnippet>1915</a> "type": "list",
-<a href=#1916 id=1916 data-nosnippet>1916</a> "element-id": 15,
-<a href=#1917 id=1917 data-nosnippet>1917</a> "element-required": true,
-<a href=#1918 id=1918 data-nosnippet>1918</a> "element": "int"
-<a href=#1919 id=1919 data-nosnippet>1919</a> }
-<a href=#1920 id=1920 data-nosnippet>1920</a> },
-<a href=#1921 id=1921 data-nosnippet>1921</a> {
-<a href=#1922 id=1922 data-nosnippet>1922</a> "id":24,
-<a href=#1923 id=1923 data-nosnippet>1923</a> "name":"large_list",
-<a href=#1924 id=1924 data-nosnippet>1924</a> "required": false,
-<a href=#1925 id=1925 data-nosnippet>1925</a> "type": {
-<a href=#1926 id=1926 data-nosnippet>1926</a> "type": "list",
-<a href=#1927 id=1927 data-nosnippet>1927</a> "element-id": 23,
-<a href=#1928 id=1928 data-nosnippet>1928</a> "element-required": true,
-<a href=#1929 id=1929 data-nosnippet>1929</a> "element": "string"
-<a href=#1930 id=1930 data-nosnippet>1930</a> }
-<a href=#1931 id=1931 data-nosnippet>1931</a> },
-<a href=#1932 id=1932 data-nosnippet>1932</a> {
-<a href=#1933 id=1933 data-nosnippet>1933</a> "id":25,
-<a href=#1934 id=1934 data-nosnippet>1934</a> "name":"fixed_list",
-<a href=#1935 id=1935 data-nosnippet>1935</a> "required": false,
-<a href=#1936 id=1936 data-nosnippet>1936</a> "type": {
-<a href=#1937 id=1937 data-nosnippet>1937</a> "type": "list",
-<a href=#1938 id=1938 data-nosnippet>1938</a> "element-id": 26,
-<a href=#1939 id=1939 data-nosnippet>1939</a> "element-required": true,
-<a href=#1940 id=1940 data-nosnippet>1940</a> "element": "binary"
-<a href=#1941 id=1941 data-nosnippet>1941</a> }
-<a href=#1942 id=1942 data-nosnippet>1942</a> },
-<a href=#1943 id=1943 data-nosnippet>1943</a> {
-<a href=#1944 id=1944 data-nosnippet>1944</a> "id":16,
-<a href=#1945 id=1945 data-nosnippet>1945</a> "name":"map",
-<a href=#1946 id=1946 data-nosnippet>1946</a> "required": true,
-<a href=#1947 id=1947 data-nosnippet>1947</a> "type": {
-<a href=#1948 id=1948 data-nosnippet>1948</a> "type": "map",
-<a href=#1949 id=1949 data-nosnippet>1949</a> "key-id": 28,
-<a href=#1950 id=1950 data-nosnippet>1950</a> "key": "int",
-<a href=#1951 id=1951 data-nosnippet>1951</a> "value-id": 29,
-<a href=#1952 id=1952 data-nosnippet>1952</a> "value-required": false,
-<a href=#1953 id=1953 data-nosnippet>1953</a> "value": "string"
-<a href=#1954 id=1954 data-nosnippet>1954</a> }
-<a href=#1955 id=1955 data-nosnippet>1955</a> },
-<a href=#1956 id=1956 data-nosnippet>1956</a> {
-<a href=#1957 id=1957 data-nosnippet>1957</a> "id":17,
-<a href=#1958 id=1958 data-nosnippet>1958</a> "name":"struct",
-<a href=#1959 id=1959 data-nosnippet>1959</a> "required": true,
-<a href=#1960 id=1960 data-nosnippet>1960</a> "type": {
-<a href=#1961 id=1961 data-nosnippet>1961</a> "type": "struct",
-<a href=#1962 id=1962 data-nosnippet>1962</a> "fields": [
-<a href=#1963 id=1963 data-nosnippet>1963</a> {
-<a href=#1964 id=1964 data-nosnippet>1964</a> "id":18,
-<a href=#1965 id=1965 data-nosnippet>1965</a> "name":"aa",
-<a href=#1966 id=1966 data-nosnippet>1966</a> "required":true,
-<a href=#1967 id=1967 data-nosnippet>1967</a> "type":"int"
-<a href=#1968 id=1968 data-nosnippet>1968</a> },
-<a href=#1969 id=1969 data-nosnippet>1969</a> {
-<a href=#1970 id=1970 data-nosnippet>1970</a> "id":19,
-<a href=#1971 id=1971 data-nosnippet>1971</a> "name":"bb",
-<a href=#1972 id=1972 data-nosnippet>1972</a> "required":false,
-<a href=#1973 id=1973 data-nosnippet>1973</a> "type":"string"
-<a href=#1974 id=1974 data-nosnippet>1974</a> },
-<a href=#1975 id=1975 data-nosnippet>1975</a> {
-<a href=#1976 id=1976 data-nosnippet>1976</a> "id":20,
-<a href=#1977 id=1977 data-nosnippet>1977</a> "name":"cc",
-<a href=#1978 id=1978 data-nosnippet>1978</a> "required":true,
-<a href=#1979 id=1979 data-nosnippet>1979</a> "type":"timestamp"
-<a href=#1980 id=1980 data-nosnippet>1980</a> }
-<a href=#1981 id=1981 data-nosnippet>1981</a> ]
-<a href=#1982 id=1982 data-nosnippet>1982</a> }
-<a href=#1983 id=1983 data-nosnippet>1983</a> },
-<a href=#1984 id=1984 data-nosnippet>1984</a> {
-<a href=#1985 id=1985 data-nosnippet>1985</a> "id":30,
-<a href=#1986 id=1986 data-nosnippet>1986</a> "name":"uuid",
-<a href=#1987 id=1987 data-nosnippet>1987</a> "required":true,
-<a href=#1988 id=1988 data-nosnippet>1988</a> "type":"uuid"
-<a href=#1989 id=1989 data-nosnippet>1989</a> },
-<a href=#1990 id=1990 data-nosnippet>1990</a> {
-<a href=#1991 id=1991 data-nosnippet>1991</a> "id":31,
-<a href=#1992 id=1992 data-nosnippet>1992</a> "name":"v",
-<a href=#1993 id=1993 data-nosnippet>1993</a> "required":false,
-<a href=#1994 id=1994 data-nosnippet>1994</a> "type":"variant"
-<a href=#1995 id=1995 data-nosnippet>1995</a> }
-<a href=#1996 id=1996 data-nosnippet>1996</a> ],
-<a href=#1997 id=1997 data-nosnippet>1997</a> "identifier-field-ids":[]
-<a href=#1998 id=1998 data-nosnippet>1998</a> }"#</span>;
-<a href=#1999 id=1999 data-nosnippet>1999</a>
-<a href=#2000 id=2000 data-nosnippet>2000</a> <span class="kw">let </span>schema: Schema = serde_json::from_str(schema_json).unwrap();
-<a href=#2001 id=2001 data-nosnippet>2001</a> schema
-<a href=#2002 id=2002 data-nosnippet>2002</a> }
-<a href=#2003 id=2003 data-nosnippet>2003</a>
-<a href=#2004 id=2004 data-nosnippet>2004</a> <span class="attr">#[test]
-<a href=#2005 id=2005 data-nosnippet>2005</a> </span><span class="kw">fn </span>test_schema_to_arrow_schema() {
-<a href=#2006 id=2006 data-nosnippet>2006</a> <span class="kw">let </span>arrow_schema = arrow_schema_for_schema_to_arrow_schema_test();
-<a href=#2007 id=2007 data-nosnippet>2007</a> <span class="kw">let </span>schema = iceberg_schema_for_schema_to_arrow_schema();
-<a href=#2008 id=2008 data-nosnippet>2008</a> <span class="kw">let </span>converted_arrow_schema = schema_to_arrow_schema(<span class="kw-2">&</span>schema).unwrap();
-<a href=#2009 id=2009 data-nosnippet>2009</a> <span class="macro">assert_eq!</span>(converted_arrow_schema, arrow_schema);
-<a href=#2010 id=2010 data-nosnippet>2010</a> }
-<a href=#2011 id=2011 data-nosnippet>2011</a>
-<a href=#2012 id=2012 data-nosnippet>2012</a> <span class="attr">#[test]
-<a href=#2013 id=2013 data-nosnippet>2013</a> </span><span class="kw">fn </span>test_variant_type_to_arrow_type() {
-<a href=#2014 id=2014 data-nosnippet>2014</a> <span class="comment">// Variant maps to a struct with a required `metadata` and a nullable `value` binary
-<a href=#2015 id=2015 data-nosnippet>2015</a> // field, with no field ids on the sub-fields, matching the Parquet BINARY layout.
-<a href=#2016 id=2016 data-nosnippet>2016</a> </span><span class="kw">let </span>arrow_type = type_to_arrow_type(<span class="kw-2">&</span>Type::Variant(VariantType)).unwrap();
-<a href=#2017 id=2017 data-nosnippet>2017</a> <span class="macro">assert_eq!</span>(
-<a href=#2018 id=2018 data-nosnippet>2018</a> arrow_type,
-<a href=#2019 id=2019 data-nosnippet>2019</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[
-<a href=#2020 id=2020 data-nosnippet>2020</a> Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>),
-<a href=#2021 id=2021 data-nosnippet>2021</a> Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>),
-<a href=#2022 id=2022 data-nosnippet>2022</a> ]))
-<a href=#2023 id=2023 data-nosnippet>2023</a> );
-<a href=#2024 id=2024 data-nosnippet>2024</a> }
-<a href=#2025 id=2025 data-nosnippet>2025</a>
-<a href=#2026 id=2026 data-nosnippet>2026</a> <span class="attr">#[test]
-<a href=#2027 id=2027 data-nosnippet>2027</a> </span><span class="kw">fn </span>test_variant_field_carries_arrow_extension_type() {
-<a href=#2028 id=2028 data-nosnippet>2028</a> <span class="comment">// Converting a schema with a variant column tags the column's field with the
-<a href=#2029 id=2029 data-nosnippet>2029</a> // canonical `arrow.parquet.variant` extension type (the struct storage stays as-is).
-<a href=#2030 id=2030 data-nosnippet>2030</a> </span><span class="kw">let </span>schema = Schema::builder()
-<a href=#2031 id=2031 data-nosnippet>2031</a> .with_fields(<span class="macro">vec!</span>[
-<a href=#2032 id=2032 data-nosnippet>2032</a> NestedField::optional(<span class="number">1</span>, <span class="string">"v"</span>, Type::Variant(VariantType)).into(),
-<a href=#2033 id=2033 data-nosnippet>2033</a> ])
-<a href=#2034 id=2034 data-nosnippet>2034</a> .build()
-<a href=#2035 id=2035 data-nosnippet>2035</a> .unwrap();
-<a href=#2036 id=2036 data-nosnippet>2036</a>
-<a href=#2037 id=2037 data-nosnippet>2037</a> <span class="kw">let </span>arrow_schema = schema_to_arrow_schema(<span class="kw-2">&</span>schema).unwrap();
-<a href=#2038 id=2038 data-nosnippet>2038</a> <span class="kw">let </span>field = arrow_schema.field_with_name(<span class="string">"v"</span>).unwrap();
-<a href=#2039 id=2039 data-nosnippet>2039</a>
-<a href=#2040 id=2040 data-nosnippet>2040</a> <span class="macro">assert_eq!</span>(field.extension_type_name(), <span class="prelude-val">Some</span>(<span class="string">"arrow.parquet.variant"</span>));
-<a href=#2041 id=2041 data-nosnippet>2041</a> <span class="comment">// Attaching the extension type must not clobber the Iceberg field id.
-<a href=#2042 id=2042 data-nosnippet>2042</a> </span><span class="macro">assert_eq!</span>(
-<a href=#2043 id=2043 data-nosnippet>2043</a> field.metadata().get(PARQUET_FIELD_ID_META_KEY),
-<a href=#2044 id=2044 data-nosnippet>2044</a> <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="string">"1"</span>.to_string())
-<a href=#2045 id=2045 data-nosnippet>2045</a> );
-<a href=#2046 id=2046 data-nosnippet>2046</a> <span class="macro">assert_eq!</span>(
-<a href=#2047 id=2047 data-nosnippet>2047</a> field.data_type(),
-<a href=#2048 id=2048 data-nosnippet>2048</a> <span class="kw-2">&</span>DataType::Struct(Fields::from(<span class="macro">vec!</span>[
-<a href=#2049 id=2049 data-nosnippet>2049</a> Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>),
-<a href=#2050 id=2050 data-nosnippet>2050</a> Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>),
-<a href=#2051 id=2051 data-nosnippet>2051</a> ]))
-<a href=#2052 id=2052 data-nosnippet>2052</a> );
-<a href=#2053 id=2053 data-nosnippet>2053</a> }
-<a href=#2054 id=2054 data-nosnippet>2054</a>
-<a href=#2055 id=2055 data-nosnippet>2055</a> <span class="attr">#[test]
-<a href=#2056 id=2056 data-nosnippet>2056</a> </span><span class="kw">fn </span>test_variant_nested_in_list_and_map_carries_arrow_extension_type() {
-<a href=#2057 id=2057 data-nosnippet>2057</a> <span class="comment">// A variant nested in a list element or map value keeps the arrow.parquet.variant
-<a href=#2058 id=2058 data-nosnippet>2058</a> // extension type. Regression guard: the list converter must not overwrite the
-<a href=#2059 id=2059 data-nosnippet>2059</a> // element field's metadata (which would drop the extension type).
-<a href=#2060 id=2060 data-nosnippet>2060</a> </span><span class="kw">let </span>schema = Schema::builder()
-<a href=#2061 id=2061 data-nosnippet>2061</a> .with_fields(<span class="macro">vec!</span>[
-<a href=#2062 id=2062 data-nosnippet>2062</a> NestedField::optional(
-<a href=#2063 id=2063 data-nosnippet>2063</a> <span class="number">1</span>,
-<a href=#2064 id=2064 data-nosnippet>2064</a> <span class="string">"l"</span>,
-<a href=#2065 id=2065 data-nosnippet>2065</a> Type::List(ListType::new(
-<a href=#2066 id=2066 data-nosnippet>2066</a> NestedField::optional(<span class="number">2</span>, <span class="string">"element"</span>, Type::Variant(VariantType)).into(),
-<a href=#2067 id=2067 data-nosnippet>2067</a> )),
-<a href=#2068 id=2068 data-nosnippet>2068</a> )
-<a href=#2069 id=2069 data-nosnippet>2069</a> .into(),
-<a href=#2070 id=2070 data-nosnippet>2070</a> NestedField::optional(
-<a href=#2071 id=2071 data-nosnippet>2071</a> <span class="number">3</span>,
-<a href=#2072 id=2072 data-nosnippet>2072</a> <span class="string">"m"</span>,
-<a href=#2073 id=2073 data-nosnippet>2073</a> Type::Map(MapType::new(
-<a href=#2074 id=2074 data-nosnippet>2074</a> NestedField::map_key_element(<span class="number">4</span>, Type::Primitive(PrimitiveType::String))
-<a href=#2075 id=2075 data-nosnippet>2075</a> .into(),
-<a href=#2076 id=2076 data-nosnippet>2076</a> NestedField::map_value_element(<span class="number">5</span>, Type::Variant(VariantType), <span class="bool-val">false</span>).into(),
-<a href=#2077 id=2077 data-nosnippet>2077</a> )),
-<a href=#2078 id=2078 data-nosnippet>2078</a> )
-<a href=#2079 id=2079 data-nosnippet>2079</a> .into(),
-<a href=#2080 id=2080 data-nosnippet>2080</a> ])
-<a href=#2081 id=2081 data-nosnippet>2081</a> .build()
-<a href=#2082 id=2082 data-nosnippet>2082</a> .unwrap();
-<a href=#2083 id=2083 data-nosnippet>2083</a>
-<a href=#2084 id=2084 data-nosnippet>2084</a> <span class="kw">let </span>arrow_schema = schema_to_arrow_schema(<span class="kw-2">&</span>schema).unwrap();
-<a href=#2085 id=2085 data-nosnippet>2085</a>
-<a href=#2086 id=2086 data-nosnippet>2086</a> <span class="kw">let </span>DataType::List(element) = arrow_schema.field_with_name(<span class="string">"l"</span>).unwrap().data_type() <span class="kw">else </span>{
-<a href=#2087 id=2087 data-nosnippet>2087</a> <span class="macro">panic!</span>(<span class="string">"expected a list"</span>);
-<a href=#2088 id=2088 data-nosnippet>2088</a> };
-<a href=#2089 id=2089 data-nosnippet>2089</a> <span class="macro">assert_eq!</span>(element.extension_type_name(), <span class="prelude-val">Some</span>(<span class="string">"arrow.parquet.variant"</span>));
-<a href=#2090 id=2090 data-nosnippet>2090</a>
-<a href=#2091 id=2091 data-nosnippet>2091</a> <span class="kw">let </span>DataType::Map(entries, <span class="kw">_</span>) = arrow_schema.field_with_name(<span class="string">"m"</span>).unwrap().data_type()
-<a href=#2092 id=2092 data-nosnippet>2092</a> <span class="kw">else </span>{
-<a href=#2093 id=2093 data-nosnippet>2093</a> <span class="macro">panic!</span>(<span class="string">"expected a map"</span>);
-<a href=#2094 id=2094 data-nosnippet>2094</a> };
-<a href=#2095 id=2095 data-nosnippet>2095</a> <span class="kw">let </span>DataType::Struct(kv) = entries.data_type() <span class="kw">else </span>{
-<a href=#2096 id=2096 data-nosnippet>2096</a> <span class="macro">panic!</span>(<span class="string">"expected a key_value struct"</span>);
-<a href=#2097 id=2097 data-nosnippet>2097</a> };
-<a href=#2098 id=2098 data-nosnippet>2098</a> <span class="kw">let </span>value = kv.iter().find(|f| f.name() == <span class="string">"value"</span>).unwrap();
-<a href=#2099 id=2099 data-nosnippet>2099</a> <span class="macro">assert_eq!</span>(value.extension_type_name(), <span class="prelude-val">Some</span>(<span class="string">"arrow.parquet.variant"</span>));
-<a href=#2100 id=2100 data-nosnippet>2100</a> }
-<a href=#2101 id=2101 data-nosnippet>2101</a>
-<a href=#2102 id=2102 data-nosnippet>2102</a> <span class="doccomment">/// The unshredded Arrow storage of a variant: `metadata` (required) + `value`
-<a href=#2103 id=2103 data-nosnippet>2103</a> /// (nullable) binary, with no field ids on the sub-fields.
-<a href=#2104 id=2104 data-nosnippet>2104</a> </span><span class="kw">fn </span>variant_storage() -> DataType {
-<a href=#2105 id=2105 data-nosnippet>2105</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[
-<a href=#2106 id=2106 data-nosnippet>2106</a> Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>),
-<a href=#2107 id=2107 data-nosnippet>2107</a> Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>),
-<a href=#2108 id=2108 data-nosnippet>2108</a> ]))
-<a href=#2109 id=2109 data-nosnippet>2109</a> }
-<a href=#2110 id=2110 data-nosnippet>2110</a>
-<a href=#2111 id=2111 data-nosnippet>2111</a> <span class="attr">#[test]
-<a href=#2112 id=2112 data-nosnippet>2112</a> </span><span class="kw">fn </span>test_variant_arrow_field_folds_to_iceberg_variant() {
-<a href=#2113 id=2113 data-nosnippet>2113</a> <span class="comment">// A field tagged with the arrow.parquet.variant extension is folded into an
-<a href=#2114 id=2114 data-nosnippet>2114</a> // atomic Type::Variant; its storage sub-fields (which carry no field id) are
-<a href=#2115 id=2115 data-nosnippet>2115</a> // never descended into.
-<a href=#2116 id=2116 data-nosnippet>2116</a> </span><span class="kw">let </span>field = simple_field(<span class="string">"v"</span>, variant_storage(), <span class="bool-val">true</span>, <span class="string">"1"</span>)
-<a href=#2117 id=2117 data-nosnippet>2117</a> .with_extension_type(VariantExtensionType);
-<a href=#2118 id=2118 data-nosnippet>2118</a> <span class="kw">let </span>arrow_schema = ArrowSchema::new(<span class="macro">vec!</span>[field]);
-<a href=#2119 id=2119 data-nosnippet>2119</a>
-<a href=#2120 id=2120 data-nosnippet>2120</a> <span class="kw">let </span>converted = arrow_schema_to_schema(<span class="kw-2">&</span>arrow_schema).unwrap();
-<a href=#2121 id=2121 data-nosnippet>2121</a> <span class="kw">let </span>expected = Schema::builder()
-<a href=#2122 id=2122 data-nosnippet>2122</a> .with_fields(<span class="macro">vec!</span>[
-<a href=#2123 id=2123 data-nosnippet>2123</a> NestedField::optional(<span class="number">1</span>, <span class="string">"v"</span>, Type::Variant(VariantType)).into(),
-<a href=#2124 id=2124 data-nosnippet>2124</a> ])
-<a href=#2125 id=2125 data-nosnippet>2125</a> .build()
-<a href=#2126 id=2126 data-nosnippet>2126</a> .unwrap();
-<a href=#2127 id=2127 data-nosnippet>2127</a> <span class="macro">pretty_assertions::assert_eq!</span>(converted, expected);
-<a href=#2128 id=2128 data-nosnippet>2128</a> }
-<a href=#2129 id=2129 data-nosnippet>2129</a>
-<a href=#2130 id=2130 data-nosnippet>2130</a> <span class="attr">#[test]
-<a href=#2131 id=2131 data-nosnippet>2131</a> </span><span class="kw">fn </span>test_variant_schema_round_trips() {
-<a href=#2132 id=2132 data-nosnippet>2132</a> <span class="comment">// Iceberg -> Arrow -> Iceberg is the identity for variants at every position:
-<a href=#2133 id=2133 data-nosnippet>2133</a> // top-level, nested in a struct, as a list element, and as a map value.
-<a href=#2134 id=2134 data-nosnippet>2134</a> </span><span class="kw">let </span>schema = Schema::builder()
-<a href=#2135 id=2135 data-nosnippet>2135</a> .with_fields(<span class="macro">vec!</span>[
-<a href=#2136 id=2136 data-nosnippet>2136</a> NestedField::optional(<span class="number">1</span>, <span class="string">"v"</span>, Type::Variant(VariantType)).into(),
-<a href=#2137 id=2137 data-nosnippet>2137</a> NestedField::optional(
-<a href=#2138 id=2138 data-nosnippet>2138</a> <span class="number">2</span>,
-<a href=#2139 id=2139 data-nosnippet>2139</a> <span class="string">"s"</span>,
-<a href=#2140 id=2140 data-nosnippet>2140</a> Type::Struct(StructType::new(<span class="macro">vec!</span>[
-<a href=#2141 id=2141 data-nosnippet>2141</a> NestedField::optional(<span class="number">3</span>, <span class="string">"sv"</span>, Type::Variant(VariantType)).into(),
-<a href=#2142 id=2142 data-nosnippet>2142</a> ])),
-<a href=#2143 id=2143 data-nosnippet>2143</a> )
-<a href=#2144 id=2144 data-nosnippet>2144</a> .into(),
-<a href=#2145 id=2145 data-nosnippet>2145</a> NestedField::optional(
-<a href=#2146 id=2146 data-nosnippet>2146</a> <span class="number">4</span>,
-<a href=#2147 id=2147 data-nosnippet>2147</a> <span class="string">"l"</span>,
-<a href=#2148 id=2148 data-nosnippet>2148</a> Type::List(ListType::new(
-<a href=#2149 id=2149 data-nosnippet>2149</a> NestedField::optional(<span class="number">5</span>, <span class="string">"element"</span>, Type::Variant(VariantType)).into(),
-<a href=#2150 id=2150 data-nosnippet>2150</a> )),
-<a href=#2151 id=2151 data-nosnippet>2151</a> )
-<a href=#2152 id=2152 data-nosnippet>2152</a> .into(),
-<a href=#2153 id=2153 data-nosnippet>2153</a> NestedField::optional(
-<a href=#2154 id=2154 data-nosnippet>2154</a> <span class="number">6</span>,
-<a href=#2155 id=2155 data-nosnippet>2155</a> <span class="string">"m"</span>,
-<a href=#2156 id=2156 data-nosnippet>2156</a> Type::Map(MapType::new(
-<a href=#2157 id=2157 data-nosnippet>2157</a> NestedField::map_key_element(<span class="number">7</span>, Type::Primitive(PrimitiveType::String))
-<a href=#2158 id=2158 data-nosnippet>2158</a> .into(),
-<a href=#2159 id=2159 data-nosnippet>2159</a> NestedField::map_value_element(<span class="number">8</span>, Type::Variant(VariantType), <span class="bool-val">false</span>).into(),
-<a href=#2160 id=2160 data-nosnippet>2160</a> )),
-<a href=#2161 id=2161 data-nosnippet>2161</a> )
-<a href=#2162 id=2162 data-nosnippet>2162</a> .into(),
-<a href=#2163 id=2163 data-nosnippet>2163</a> ])
-<a href=#2164 id=2164 data-nosnippet>2164</a> .build()
-<a href=#2165 id=2165 data-nosnippet>2165</a> .unwrap();
-<a href=#2166 id=2166 data-nosnippet>2166</a>
-<a href=#2167 id=2167 data-nosnippet>2167</a> <span class="kw">let </span>arrow_schema = schema_to_arrow_schema(<span class="kw-2">&</span>schema).unwrap();
-<a href=#2168 id=2168 data-nosnippet>2168</a> <span class="kw">let </span>round_tripped = arrow_schema_to_schema(<span class="kw-2">&</span>arrow_schema).unwrap();
-<a href=#2169 id=2169 data-nosnippet>2169</a> <span class="macro">pretty_assertions::assert_eq!</span>(round_tripped, schema);
-<a href=#2170 id=2170 data-nosnippet>2170</a> }
-<a href=#2171 id=2171 data-nosnippet>2171</a>
-<a href=#2172 id=2172 data-nosnippet>2172</a> <span class="attr">#[test]
-<a href=#2173 id=2173 data-nosnippet>2173</a> </span><span class="kw">fn </span>test_variant_recognized_with_auto_assigned_ids() {
-<a href=#2174 id=2174 data-nosnippet>2174</a> <span class="comment">// Recognition also works when the Arrow schema has no field ids: the variant
-<a href=#2175 id=2175 data-nosnippet>2175</a> // field gets an auto-assigned id and its storage is still not descended into.
-<a href=#2176 id=2176 data-nosnippet>2176</a> </span><span class="kw">let </span>field =
-<a href=#2177 id=2177 data-nosnippet>2177</a> Field::new(<span class="string">"v"</span>, variant_storage(), <span class="bool-val">true</span>).with_extension_type(VariantExtensionType);
-<a href=#2178 id=2178 data-nosnippet>2178</a> <span class="kw">let </span>arrow_schema = ArrowSchema::new(<span class="macro">vec!</span>[field]);
+<a href=#1486 id=1486 data-nosnippet>1486</a> simple_field(<span class="string">"e"</span>, DataType::Boolean, <span class="bool-val">true</span>, <span class="string">"6"</span>),
+<a href=#1487 id=1487 data-nosnippet>1487</a> simple_field(<span class="string">"f"</span>, DataType::Float32, <span class="bool-val">false</span>, <span class="string">"5"</span>),
+<a href=#1488 id=1488 data-nosnippet>1488</a> simple_field(<span class="string">"g"</span>, DataType::Float64, <span class="bool-val">false</span>, <span class="string">"7"</span>),
+<a href=#1489 id=1489 data-nosnippet>1489</a> simple_field(<span class="string">"p"</span>, DataType::Decimal128(<span class="number">10</span>, <span class="number">2</span>), <span class="bool-val">false</span>, <span class="string">"27"</span>),
+<a href=#1490 id=1490 data-nosnippet>1490</a> simple_field(<span class="string">"h"</span>, DataType::Date32, <span class="bool-val">false</span>, <span class="string">"8"</span>),
+<a href=#1491 id=1491 data-nosnippet>1491</a> simple_field(<span class="string">"i"</span>, DataType::Time64(TimeUnit::Microsecond), <span class="bool-val">false</span>, <span class="string">"9"</span>),
+<a href=#1492 id=1492 data-nosnippet>1492</a> simple_field(
+<a href=#1493 id=1493 data-nosnippet>1493</a> <span class="string">"j"</span>,
+<a href=#1494 id=1494 data-nosnippet>1494</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"UTC"</span>.into())),
+<a href=#1495 id=1495 data-nosnippet>1495</a> <span class="bool-val">false</span>,
+<a href=#1496 id=1496 data-nosnippet>1496</a> <span class="string">"10"</span>,
+<a href=#1497 id=1497 data-nosnippet>1497</a> ),
+<a href=#1498 id=1498 data-nosnippet>1498</a> simple_field(
+<a href=#1499 id=1499 data-nosnippet>1499</a> <span class="string">"k"</span>,
+<a href=#1500 id=1500 data-nosnippet>1500</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
+<a href=#1501 id=1501 data-nosnippet>1501</a> <span class="bool-val">false</span>,
+<a href=#1502 id=1502 data-nosnippet>1502</a> <span class="string">"12"</span>,
+<a href=#1503 id=1503 data-nosnippet>1503</a> ),
+<a href=#1504 id=1504 data-nosnippet>1504</a> simple_field(<span class="string">"l"</span>, DataType::Binary, <span class="bool-val">false</span>, <span class="string">"13"</span>),
+<a href=#1505 id=1505 data-nosnippet>1505</a> simple_field(<span class="string">"o"</span>, DataType::LargeBinary, <span class="bool-val">false</span>, <span class="string">"22"</span>),
+<a href=#1506 id=1506 data-nosnippet>1506</a> simple_field(<span class="string">"m"</span>, DataType::FixedSizeBinary(<span class="number">10</span>), <span class="bool-val">false</span>, <span class="string">"11"</span>),
+<a href=#1507 id=1507 data-nosnippet>1507</a> simple_field(
+<a href=#1508 id=1508 data-nosnippet>1508</a> <span class="string">"list"</span>,
+<a href=#1509 id=1509 data-nosnippet>1509</a> DataType::List(Arc::new(simple_field(
+<a href=#1510 id=1510 data-nosnippet>1510</a> <span class="string">"element"</span>,
+<a href=#1511 id=1511 data-nosnippet>1511</a> DataType::Int32,
+<a href=#1512 id=1512 data-nosnippet>1512</a> <span class="bool-val">false</span>,
+<a href=#1513 id=1513 data-nosnippet>1513</a> <span class="string">"15"</span>,
+<a href=#1514 id=1514 data-nosnippet>1514</a> ))),
+<a href=#1515 id=1515 data-nosnippet>1515</a> <span class="bool-val">true</span>,
+<a href=#1516 id=1516 data-nosnippet>1516</a> <span class="string">"14"</span>,
+<a href=#1517 id=1517 data-nosnippet>1517</a> ),
+<a href=#1518 id=1518 data-nosnippet>1518</a> simple_field(
+<a href=#1519 id=1519 data-nosnippet>1519</a> <span class="string">"large_list"</span>,
+<a href=#1520 id=1520 data-nosnippet>1520</a> DataType::LargeList(Arc::new(simple_field(
+<a href=#1521 id=1521 data-nosnippet>1521</a> <span class="string">"element"</span>,
+<a href=#1522 id=1522 data-nosnippet>1522</a> DataType::Utf8,
+<a href=#1523 id=1523 data-nosnippet>1523</a> <span class="bool-val">false</span>,
+<a href=#1524 id=1524 data-nosnippet>1524</a> <span class="string">"23"</span>,
+<a href=#1525 id=1525 data-nosnippet>1525</a> ))),
+<a href=#1526 id=1526 data-nosnippet>1526</a> <span class="bool-val">true</span>,
+<a href=#1527 id=1527 data-nosnippet>1527</a> <span class="string">"24"</span>,
+<a href=#1528 id=1528 data-nosnippet>1528</a> ),
+<a href=#1529 id=1529 data-nosnippet>1529</a> simple_field(
+<a href=#1530 id=1530 data-nosnippet>1530</a> <span class="string">"fixed_list"</span>,
+<a href=#1531 id=1531 data-nosnippet>1531</a> DataType::FixedSizeList(
+<a href=#1532 id=1532 data-nosnippet>1532</a> Arc::new(simple_field(<span class="string">"element"</span>, DataType::Binary, <span class="bool-val">false</span>, <span class="string">"26"</span>)),
+<a href=#1533 id=1533 data-nosnippet>1533</a> <span class="number">10</span>,
+<a href=#1534 id=1534 data-nosnippet>1534</a> ),
+<a href=#1535 id=1535 data-nosnippet>1535</a> <span class="bool-val">true</span>,
+<a href=#1536 id=1536 data-nosnippet>1536</a> <span class="string">"25"</span>,
+<a href=#1537 id=1537 data-nosnippet>1537</a> ),
+<a href=#1538 id=1538 data-nosnippet>1538</a> simple_field(<span class="string">"map"</span>, map, <span class="bool-val">false</span>, <span class="string">"16"</span>),
+<a href=#1539 id=1539 data-nosnippet>1539</a> simple_field(<span class="string">"struct"</span>, r#struct, <span class="bool-val">false</span>, <span class="string">"17"</span>),
+<a href=#1540 id=1540 data-nosnippet>1540</a> simple_field(<span class="string">"dictionary"</span>, dictionary, <span class="bool-val">false</span>, <span class="string">"30"</span>),
+<a href=#1541 id=1541 data-nosnippet>1541</a> ])
+<a href=#1542 id=1542 data-nosnippet>1542</a> }
+<a href=#1543 id=1543 data-nosnippet>1543</a>
+<a href=#1544 id=1544 data-nosnippet>1544</a> <span class="kw">fn </span>iceberg_schema_for_arrow_schema_to_schema_test() -> Schema {
+<a href=#1545 id=1545 data-nosnippet>1545</a> <span class="kw">let </span>schema_json = <span class="string">r#"{
+<a href=#1546 id=1546 data-nosnippet>1546</a> "type":"struct",
+<a href=#1547 id=1547 data-nosnippet>1547</a> "schema-id":0,
+<a href=#1548 id=1548 data-nosnippet>1548</a> "fields":[
+<a href=#1549 id=1549 data-nosnippet>1549</a> {
+<a href=#1550 id=1550 data-nosnippet>1550</a> "id":2,
+<a href=#1551 id=1551 data-nosnippet>1551</a> "name":"a",
+<a href=#1552 id=1552 data-nosnippet>1552</a> "required":true,
+<a href=#1553 id=1553 data-nosnippet>1553</a> "type":"int"
+<a href=#1554 id=1554 data-nosnippet>1554</a> },
+<a href=#1555 id=1555 data-nosnippet>1555</a> {
+<a href=#1556 id=1556 data-nosnippet>1556</a> "id":1,
+<a href=#1557 id=1557 data-nosnippet>1557</a> "name":"b",
+<a href=#1558 id=1558 data-nosnippet>1558</a> "required":true,
+<a href=#1559 id=1559 data-nosnippet>1559</a> "type":"long"
+<a href=#1560 id=1560 data-nosnippet>1560</a> },
+<a href=#1561 id=1561 data-nosnippet>1561</a> {
+<a href=#1562 id=1562 data-nosnippet>1562</a> "id":3,
+<a href=#1563 id=1563 data-nosnippet>1563</a> "name":"c",
+<a href=#1564 id=1564 data-nosnippet>1564</a> "required":true,
+<a href=#1565 id=1565 data-nosnippet>1565</a> "type":"string"
+<a href=#1566 id=1566 data-nosnippet>1566</a> },
+<a href=#1567 id=1567 data-nosnippet>1567</a> {
+<a href=#1568 id=1568 data-nosnippet>1568</a> "id":21,
+<a href=#1569 id=1569 data-nosnippet>1569</a> "name":"n",
+<a href=#1570 id=1570 data-nosnippet>1570</a> "required":true,
+<a href=#1571 id=1571 data-nosnippet>1571</a> "type":"string"
+<a href=#1572 id=1572 data-nosnippet>1572</a> },
+<a href=#1573 id=1573 data-nosnippet>1573</a> {
+<a href=#1574 id=1574 data-nosnippet>1574</a> "id":4,
+<a href=#1575 id=1575 data-nosnippet>1575</a> "name":"d",
+<a href=#1576 id=1576 data-nosnippet>1576</a> "required":false,
+<a href=#1577 id=1577 data-nosnippet>1577</a> "type":"timestamp"
+<a href=#1578 id=1578 data-nosnippet>1578</a> },
+<a href=#1579 id=1579 data-nosnippet>1579</a> {
+<a href=#1580 id=1580 data-nosnippet>1580</a> "id":6,
+<a href=#1581 id=1581 data-nosnippet>1581</a> "name":"e",
+<a href=#1582 id=1582 data-nosnippet>1582</a> "required":false,
+<a href=#1583 id=1583 data-nosnippet>1583</a> "type":"boolean"
+<a href=#1584 id=1584 data-nosnippet>1584</a> },
+<a href=#1585 id=1585 data-nosnippet>1585</a> {
+<a href=#1586 id=1586 data-nosnippet>1586</a> "id":5,
+<a href=#1587 id=1587 data-nosnippet>1587</a> "name":"f",
+<a href=#1588 id=1588 data-nosnippet>1588</a> "required":true,
+<a href=#1589 id=1589 data-nosnippet>1589</a> "type":"float"
+<a href=#1590 id=1590 data-nosnippet>1590</a> },
+<a href=#1591 id=1591 data-nosnippet>1591</a> {
+<a href=#1592 id=1592 data-nosnippet>1592</a> "id":7,
+<a href=#1593 id=1593 data-nosnippet>1593</a> "name":"g",
+<a href=#1594 id=1594 data-nosnippet>1594</a> "required":true,
+<a href=#1595 id=1595 data-nosnippet>1595</a> "type":"double"
+<a href=#1596 id=1596 data-nosnippet>1596</a> },
+<a href=#1597 id=1597 data-nosnippet>1597</a> {
+<a href=#1598 id=1598 data-nosnippet>1598</a> "id":27,
+<a href=#1599 id=1599 data-nosnippet>1599</a> "name":"p",
+<a href=#1600 id=1600 data-nosnippet>1600</a> "required":true,
+<a href=#1601 id=1601 data-nosnippet>1601</a> "type":"decimal(10,2)"
+<a href=#1602 id=1602 data-nosnippet>1602</a> },
+<a href=#1603 id=1603 data-nosnippet>1603</a> {
+<a href=#1604 id=1604 data-nosnippet>1604</a> "id":8,
+<a href=#1605 id=1605 data-nosnippet>1605</a> "name":"h",
+<a href=#1606 id=1606 data-nosnippet>1606</a> "required":true,
+<a href=#1607 id=1607 data-nosnippet>1607</a> "type":"date"
+<a href=#1608 id=1608 data-nosnippet>1608</a> },
+<a href=#1609 id=1609 data-nosnippet>1609</a> {
+<a href=#1610 id=1610 data-nosnippet>1610</a> "id":9,
+<a href=#1611 id=1611 data-nosnippet>1611</a> "name":"i",
+<a href=#1612 id=1612 data-nosnippet>1612</a> "required":true,
+<a href=#1613 id=1613 data-nosnippet>1613</a> "type":"time"
+<a href=#1614 id=1614 data-nosnippet>1614</a> },
+<a href=#1615 id=1615 data-nosnippet>1615</a> {
+<a href=#1616 id=1616 data-nosnippet>1616</a> "id":10,
+<a href=#1617 id=1617 data-nosnippet>1617</a> "name":"j",
+<a href=#1618 id=1618 data-nosnippet>1618</a> "required":true,
+<a href=#1619 id=1619 data-nosnippet>1619</a> "type":"timestamptz"
+<a href=#1620 id=1620 data-nosnippet>1620</a> },
+<a href=#1621 id=1621 data-nosnippet>1621</a> {
+<a href=#1622 id=1622 data-nosnippet>1622</a> "id":12,
+<a href=#1623 id=1623 data-nosnippet>1623</a> "name":"k",
+<a href=#1624 id=1624 data-nosnippet>1624</a> "required":true,
+<a href=#1625 id=1625 data-nosnippet>1625</a> "type":"timestamptz"
+<a href=#1626 id=1626 data-nosnippet>1626</a> },
+<a href=#1627 id=1627 data-nosnippet>1627</a> {
+<a href=#1628 id=1628 data-nosnippet>1628</a> "id":13,
+<a href=#1629 id=1629 data-nosnippet>1629</a> "name":"l",
+<a href=#1630 id=1630 data-nosnippet>1630</a> "required":true,
+<a href=#1631 id=1631 data-nosnippet>1631</a> "type":"binary"
+<a href=#1632 id=1632 data-nosnippet>1632</a> },
+<a href=#1633 id=1633 data-nosnippet>1633</a> {
+<a href=#1634 id=1634 data-nosnippet>1634</a> "id":22,
+<a href=#1635 id=1635 data-nosnippet>1635</a> "name":"o",
+<a href=#1636 id=1636 data-nosnippet>1636</a> "required":true,
+<a href=#1637 id=1637 data-nosnippet>1637</a> "type":"binary"
+<a href=#1638 id=1638 data-nosnippet>1638</a> },
+<a href=#1639 id=1639 data-nosnippet>1639</a> {
+<a href=#1640 id=1640 data-nosnippet>1640</a> "id":11,
+<a href=#1641 id=1641 data-nosnippet>1641</a> "name":"m",
+<a href=#1642 id=1642 data-nosnippet>1642</a> "required":true,
+<a href=#1643 id=1643 data-nosnippet>1643</a> "type":"fixed[10]"
+<a href=#1644 id=1644 data-nosnippet>1644</a> },
+<a href=#1645 id=1645 data-nosnippet>1645</a> {
+<a href=#1646 id=1646 data-nosnippet>1646</a> "id":14,
+<a href=#1647 id=1647 data-nosnippet>1647</a> "name":"list",
+<a href=#1648 id=1648 data-nosnippet>1648</a> "required": false,
+<a href=#1649 id=1649 data-nosnippet>1649</a> "type": {
+<a href=#1650 id=1650 data-nosnippet>1650</a> "type": "list",
+<a href=#1651 id=1651 data-nosnippet>1651</a> "element-id": 15,
+<a href=#1652 id=1652 data-nosnippet>1652</a> "element-required": true,
+<a href=#1653 id=1653 data-nosnippet>1653</a> "element": "int"
+<a href=#1654 id=1654 data-nosnippet>1654</a> }
+<a href=#1655 id=1655 data-nosnippet>1655</a> },
+<a href=#1656 id=1656 data-nosnippet>1656</a> {
+<a href=#1657 id=1657 data-nosnippet>1657</a> "id":24,
+<a href=#1658 id=1658 data-nosnippet>1658</a> "name":"large_list",
+<a href=#1659 id=1659 data-nosnippet>1659</a> "required": false,
+<a href=#1660 id=1660 data-nosnippet>1660</a> "type": {
+<a href=#1661 id=1661 data-nosnippet>1661</a> "type": "list",
+<a href=#1662 id=1662 data-nosnippet>1662</a> "element-id": 23,
+<a href=#1663 id=1663 data-nosnippet>1663</a> "element-required": true,
+<a href=#1664 id=1664 data-nosnippet>1664</a> "element": "string"
+<a href=#1665 id=1665 data-nosnippet>1665</a> }
+<a href=#1666 id=1666 data-nosnippet>1666</a> },
+<a href=#1667 id=1667 data-nosnippet>1667</a> {
+<a href=#1668 id=1668 data-nosnippet>1668</a> "id":25,
+<a href=#1669 id=1669 data-nosnippet>1669</a> "name":"fixed_list",
+<a href=#1670 id=1670 data-nosnippet>1670</a> "required": false,
+<a href=#1671 id=1671 data-nosnippet>1671</a> "type": {
+<a href=#1672 id=1672 data-nosnippet>1672</a> "type": "list",
+<a href=#1673 id=1673 data-nosnippet>1673</a> "element-id": 26,
+<a href=#1674 id=1674 data-nosnippet>1674</a> "element-required": true,
+<a href=#1675 id=1675 data-nosnippet>1675</a> "element": "binary"
+<a href=#1676 id=1676 data-nosnippet>1676</a> }
+<a href=#1677 id=1677 data-nosnippet>1677</a> },
+<a href=#1678 id=1678 data-nosnippet>1678</a> {
+<a href=#1679 id=1679 data-nosnippet>1679</a> "id":16,
+<a href=#1680 id=1680 data-nosnippet>1680</a> "name":"map",
+<a href=#1681 id=1681 data-nosnippet>1681</a> "required": true,
+<a href=#1682 id=1682 data-nosnippet>1682</a> "type": {
+<a href=#1683 id=1683 data-nosnippet>1683</a> "type": "map",
+<a href=#1684 id=1684 data-nosnippet>1684</a> "key-id": 28,
+<a href=#1685 id=1685 data-nosnippet>1685</a> "key": "int",
+<a href=#1686 id=1686 data-nosnippet>1686</a> "value-id": 29,
+<a href=#1687 id=1687 data-nosnippet>1687</a> "value-required": false,
+<a href=#1688 id=1688 data-nosnippet>1688</a> "value": "string"
+<a href=#1689 id=1689 data-nosnippet>1689</a> }
+<a href=#1690 id=1690 data-nosnippet>1690</a> },
+<a href=#1691 id=1691 data-nosnippet>1691</a> {
+<a href=#1692 id=1692 data-nosnippet>1692</a> "id":17,
+<a href=#1693 id=1693 data-nosnippet>1693</a> "name":"struct",
+<a href=#1694 id=1694 data-nosnippet>1694</a> "required": true,
+<a href=#1695 id=1695 data-nosnippet>1695</a> "type": {
+<a href=#1696 id=1696 data-nosnippet>1696</a> "type": "struct",
+<a href=#1697 id=1697 data-nosnippet>1697</a> "fields": [
+<a href=#1698 id=1698 data-nosnippet>1698</a> {
+<a href=#1699 id=1699 data-nosnippet>1699</a> "id":18,
+<a href=#1700 id=1700 data-nosnippet>1700</a> "name":"aa",
+<a href=#1701 id=1701 data-nosnippet>1701</a> "required":true,
+<a href=#1702 id=1702 data-nosnippet>1702</a> "type":"int"
+<a href=#1703 id=1703 data-nosnippet>1703</a> },
+<a href=#1704 id=1704 data-nosnippet>1704</a> {
+<a href=#1705 id=1705 data-nosnippet>1705</a> "id":19,
+<a href=#1706 id=1706 data-nosnippet>1706</a> "name":"bb",
+<a href=#1707 id=1707 data-nosnippet>1707</a> "required":false,
+<a href=#1708 id=1708 data-nosnippet>1708</a> "type":"string"
+<a href=#1709 id=1709 data-nosnippet>1709</a> },
+<a href=#1710 id=1710 data-nosnippet>1710</a> {
+<a href=#1711 id=1711 data-nosnippet>1711</a> "id":20,
+<a href=#1712 id=1712 data-nosnippet>1712</a> "name":"cc",
+<a href=#1713 id=1713 data-nosnippet>1713</a> "required":true,
+<a href=#1714 id=1714 data-nosnippet>1714</a> "type":"timestamp"
+<a href=#1715 id=1715 data-nosnippet>1715</a> }
+<a href=#1716 id=1716 data-nosnippet>1716</a> ]
+<a href=#1717 id=1717 data-nosnippet>1717</a> }
+<a href=#1718 id=1718 data-nosnippet>1718</a> },
+<a href=#1719 id=1719 data-nosnippet>1719</a> {
+<a href=#1720 id=1720 data-nosnippet>1720</a> "id":30,
+<a href=#1721 id=1721 data-nosnippet>1721</a> "name":"dictionary",
+<a href=#1722 id=1722 data-nosnippet>1722</a> "required":true,
+<a href=#1723 id=1723 data-nosnippet>1723</a> "type":"string"
+<a href=#1724 id=1724 data-nosnippet>1724</a> }
+<a href=#1725 id=1725 data-nosnippet>1725</a> ],
+<a href=#1726 id=1726 data-nosnippet>1726</a> "identifier-field-ids":[]
+<a href=#1727 id=1727 data-nosnippet>1727</a> }"#</span>;
+<a href=#1728 id=1728 data-nosnippet>1728</a>
+<a href=#1729 id=1729 data-nosnippet>1729</a> <span class="kw">let </span>schema: Schema = serde_json::from_str(schema_json).unwrap();
+<a href=#1730 id=1730 data-nosnippet>1730</a> schema
+<a href=#1731 id=1731 data-nosnippet>1731</a> }
+<a href=#1732 id=1732 data-nosnippet>1732</a>
+<a href=#1733 id=1733 data-nosnippet>1733</a> <span class="attr">#[test]
+<a href=#1734 id=1734 data-nosnippet>1734</a> </span><span class="kw">fn </span>test_arrow_schema_to_schema() {
+<a href=#1735 id=1735 data-nosnippet>1735</a> <span class="kw">let </span>arrow_schema = arrow_schema_for_arrow_schema_to_schema_test();
+<a href=#1736 id=1736 data-nosnippet>1736</a> <span class="kw">let </span>schema = iceberg_schema_for_arrow_schema_to_schema_test();
+<a href=#1737 id=1737 data-nosnippet>1737</a> <span class="kw">let </span>converted_schema = arrow_schema_to_schema(<span class="kw-2">&</span>arrow_schema).unwrap();
+<a href=#1738 id=1738 data-nosnippet>1738</a> <span class="macro">pretty_assertions::assert_eq!</span>(converted_schema, schema);
+<a href=#1739 id=1739 data-nosnippet>1739</a> }
+<a href=#1740 id=1740 data-nosnippet>1740</a>
+<a href=#1741 id=1741 data-nosnippet>1741</a> <span class="attr">#[test]
+<a href=#1742 id=1742 data-nosnippet>1742</a> </span><span class="kw">fn </span>test_converting_uuid_from_arrow_to_iceberg_to_arrow_should_give_uuid() {
+<a href=#1743 id=1743 data-nosnippet>1743</a> <span class="kw">let </span>arrow_schema = ArrowSchema::new(<span class="macro">vec!</span>[
+<a href=#1744 id=1744 data-nosnippet>1744</a> simple_field(<span class="string">"uuid_field"</span>, DataType::FixedSizeBinary(<span class="number">16</span>), <span class="bool-val">false</span>, <span class="string">"1"</span>)
+<a href=#1745 id=1745 data-nosnippet>1745</a> .with_extension_type(UuidExtensionType),
+<a href=#1746 id=1746 data-nosnippet>1746</a> ]);
+<a href=#1747 id=1747 data-nosnippet>1747</a> <span class="kw">let </span>output =
+<a href=#1748 id=1748 data-nosnippet>1748</a> schema_to_arrow_schema(<span class="kw-2">&</span>arrow_schema_to_schema(<span class="kw-2">&</span>arrow_schema).unwrap()).unwrap();
+<a href=#1749 id=1749 data-nosnippet>1749</a>
+<a href=#1750 id=1750 data-nosnippet>1750</a> <span class="macro">assert_eq!</span>(arrow_schema, output);
+<a href=#1751 id=1751 data-nosnippet>1751</a> }
+<a href=#1752 id=1752 data-nosnippet>1752</a>
+<a href=#1753 id=1753 data-nosnippet>1753</a> <span class="attr">#[test]
+<a href=#1754 id=1754 data-nosnippet>1754</a> </span><span class="kw">fn </span>test_converting_uuid_from_iceberg_to_arrow_to_iceberg_should_give_uuid() {
+<a href=#1755 id=1755 data-nosnippet>1755</a> <span class="kw">let </span>iceberg_schema = Schema::builder()
+<a href=#1756 id=1756 data-nosnippet>1756</a> .with_fields(<span class="macro">vec!</span>[
+<a href=#1757 id=1757 data-nosnippet>1757</a> NestedField::optional(<span class="number">1</span>, <span class="string">"uuid_field"</span>, Type::Primitive(PrimitiveType::Uuid)).into(),
+<a href=#1758 id=1758 data-nosnippet>1758</a> ])
+<a href=#1759 id=1759 data-nosnippet>1759</a> .build()
+<a href=#1760 id=1760 data-nosnippet>1760</a> .unwrap();
+<a href=#1761 id=1761 data-nosnippet>1761</a> <span class="kw">let </span>output =
+<a href=#1762 id=1762 data-nosnippet>1762</a> arrow_schema_to_schema(<span class="kw-2">&</span>schema_to_arrow_schema(<span class="kw-2">&</span>iceberg_schema).unwrap()).unwrap();
+<a href=#1763 id=1763 data-nosnippet>1763</a>
+<a href=#1764 id=1764 data-nosnippet>1764</a> <span class="macro">assert_eq!</span>(iceberg_schema, output);
+<a href=#1765 id=1765 data-nosnippet>1765</a> }
+<a href=#1766 id=1766 data-nosnippet>1766</a>
+<a href=#1767 id=1767 data-nosnippet>1767</a> <span class="attr">#[test]
+<a href=#1768 id=1768 data-nosnippet>1768</a> </span><span class="kw">fn </span>test_arrow_schema_to_schema_should_convert_uuid_when_fixed_size_binary() {
+<a href=#1769 id=1769 data-nosnippet>1769</a> <span class="kw">let </span>converted_schema = arrow_schema_to_schema(<span class="kw-2">&</span>ArrowSchema::new(<span class="macro">vec!</span>[
+<a href=#1770 id=1770 data-nosnippet>1770</a> simple_field(<span class="string">"uuid_field"</span>, DataType::FixedSizeBinary(<span class="number">16</span>), <span class="bool-val">false</span>, <span class="string">"1"</span>)
+<a href=#1771 id=1771 data-nosnippet>1771</a> .with_extension_type(UuidExtensionType),
+<a href=#1772 id=1772 data-nosnippet>1772</a> ]))
+<a href=#1773 id=1773 data-nosnippet>1773</a> .unwrap();
+<a href=#1774 id=1774 data-nosnippet>1774</a>
+<a href=#1775 id=1775 data-nosnippet>1775</a> <span class="kw">let </span>expected = Schema::builder()
+<a href=#1776 id=1776 data-nosnippet>1776</a> .with_fields([NestedField::required(
+<a href=#1777 id=1777 data-nosnippet>1777</a> <span class="number">1</span>,
+<a href=#1778 id=1778 data-nosnippet>1778</a> <span class="string">"uuid_field"</span>,
+<a href=#1779 id=1779 data-nosnippet>1779</a> Type::Primitive(PrimitiveType::Uuid),
+<a href=#1780 id=1780 data-nosnippet>1780</a> )
+<a href=#1781 id=1781 data-nosnippet>1781</a> .into()])
+<a href=#1782 id=1782 data-nosnippet>1782</a> .build()
+<a href=#1783 id=1783 data-nosnippet>1783</a> .unwrap();
+<a href=#1784 id=1784 data-nosnippet>1784</a>
+<a href=#1785 id=1785 data-nosnippet>1785</a> <span class="macro">pretty_assertions::assert_eq!</span>(expected, converted_schema);
+<a href=#1786 id=1786 data-nosnippet>1786</a> }
+<a href=#1787 id=1787 data-nosnippet>1787</a>
+<a href=#1788 id=1788 data-nosnippet>1788</a> <span class="attr">#[test]
+<a href=#1789 id=1789 data-nosnippet>1789</a> </span><span class="kw">fn </span>test_arrow_schema_to_schema_should_reject_uuid_when_not_a_fixed_size_binary() {
+<a href=#1790 id=1790 data-nosnippet>1790</a> <span class="comment">// The field must be built correctly, and then changed to the wrong type,
+<a href=#1791 id=1791 data-nosnippet>1791</a> // to avoid Arrow's own validation and panic.
+<a href=#1792 id=1792 data-nosnippet>1792</a> </span><span class="kw">let </span>field = simple_field_with_uuid_ext(DataType::Utf8);
+<a href=#1793 id=1793 data-nosnippet>1793</a>
+<a href=#1794 id=1794 data-nosnippet>1794</a> <span class="kw">let </span>error = arrow_schema_to_schema(<span class="kw-2">&</span>ArrowSchema::new(<span class="macro">vec!</span>[field])).unwrap_err();
+<a href=#1795 id=1795 data-nosnippet>1795</a>
+<a href=#1796 id=1796 data-nosnippet>1796</a> <span class="macro">pretty_assertions::assert_eq!</span>(
+<a href=#1797 id=1797 data-nosnippet>1797</a> <span class="string">"arrow.uuid extension requires FixedSizeBinary(16) storage, found Utf8"</span>,
+<a href=#1798 id=1798 data-nosnippet>1798</a> error.message()
+<a href=#1799 id=1799 data-nosnippet>1799</a> );
+<a href=#1800 id=1800 data-nosnippet>1800</a> }
+<a href=#1801 id=1801 data-nosnippet>1801</a>
+<a href=#1802 id=1802 data-nosnippet>1802</a> <span class="attr">#[test]
+<a href=#1803 id=1803 data-nosnippet>1803</a> </span><span class="kw">fn </span>test_arrow_schema_to_schema_should_reject_uuid_when_fixed_size_binary_that_is_less_than_16()
+<a href=#1804 id=1804 data-nosnippet>1804</a> {
+<a href=#1805 id=1805 data-nosnippet>1805</a> <span class="kw">let </span>field = simple_field_with_uuid_ext(DataType::FixedSizeBinary(<span class="number">8</span>));
+<a href=#1806 id=1806 data-nosnippet>1806</a> <span class="kw">let </span>error = arrow_schema_to_schema(<span class="kw-2">&</span>ArrowSchema::new(<span class="macro">vec!</span>[field])).unwrap_err();
+<a href=#1807 id=1807 data-nosnippet>1807</a>
+<a href=#1808 id=1808 data-nosnippet>1808</a> <span class="macro">pretty_assertions::assert_eq!</span>(
+<a href=#1809 id=1809 data-nosnippet>1809</a> <span class="string">"arrow.uuid extension requires FixedSizeBinary(16) storage, found FixedSizeBinary(8)"</span>,
+<a href=#1810 id=1810 data-nosnippet>1810</a> error.message()
+<a href=#1811 id=1811 data-nosnippet>1811</a> );
+<a href=#1812 id=1812 data-nosnippet>1812</a> }
+<a href=#1813 id=1813 data-nosnippet>1813</a>
+<a href=#1814 id=1814 data-nosnippet>1814</a> <span class="attr">#[test]
+<a href=#1815 id=1815 data-nosnippet>1815</a> </span><span class="kw">fn </span>test_arrow_schema_to_schema_should_reject_uuid_when_fixed_size_binary_that_is_more_than_16()
+<a href=#1816 id=1816 data-nosnippet>1816</a> {
+<a href=#1817 id=1817 data-nosnippet>1817</a> <span class="kw">let </span>field = simple_field_with_uuid_ext(DataType::FixedSizeBinary(<span class="number">17</span>));
+<a href=#1818 id=1818 data-nosnippet>1818</a> <span class="kw">let </span>error = arrow_schema_to_schema(<span class="kw-2">&</span>ArrowSchema::new(<span class="macro">vec!</span>[field])).unwrap_err();
+<a href=#1819 id=1819 data-nosnippet>1819</a>
+<a href=#1820 id=1820 data-nosnippet>1820</a> <span class="macro">pretty_assertions::assert_eq!</span>(
+<a href=#1821 id=1821 data-nosnippet>1821</a> <span class="string">"arrow.uuid extension requires FixedSizeBinary(16) storage, found FixedSizeBinary(17)"</span>,
+<a href=#1822 id=1822 data-nosnippet>1822</a> error.message()
+<a href=#1823 id=1823 data-nosnippet>1823</a> );
+<a href=#1824 id=1824 data-nosnippet>1824</a> }
+<a href=#1825 id=1825 data-nosnippet>1825</a>
+<a href=#1826 id=1826 data-nosnippet>1826</a> <span class="kw">fn </span>simple_field_with_uuid_ext(field_data_type: DataType) -> Field {
+<a href=#1827 id=1827 data-nosnippet>1827</a> <span class="kw">let </span><span class="kw-2">mut </span>field = simple_field(<span class="string">"uuid_field"</span>, DataType::FixedSizeBinary(<span class="number">16</span>), <span class="bool-val">false</span>, <span class="string">"1"</span>)
+<a href=#1828 id=1828 data-nosnippet>1828</a> .with_extension_type(UuidExtensionType);
+<a href=#1829 id=1829 data-nosnippet>1829</a>
+<a href=#1830 id=1830 data-nosnippet>1830</a> <span class="comment">// We want to allow setting a UUID extension to the wrong data type.
+<a href=#1831 id=1831 data-nosnippet>1831</a> // This is to test our logic against bad schemas.
+<a href=#1832 id=1832 data-nosnippet>1832</a> //
+<a href=#1833 id=1833 data-nosnippet>1833</a> // To avoid Arrow's own internal validation and panic, we need to build
+<a href=#1834 id=1834 data-nosnippet>1834</a> // the field correctly above, and then manually override the type here.
+<a href=#1835 id=1835 data-nosnippet>1835</a> </span>field = field.with_data_type(field_data_type);
+<a href=#1836 id=1836 data-nosnippet>1836</a>
+<a href=#1837 id=1837 data-nosnippet>1837</a> field
+<a href=#1838 id=1838 data-nosnippet>1838</a> }
+<a href=#1839 id=1839 data-nosnippet>1839</a>
+<a href=#1840 id=1840 data-nosnippet>1840</a> <span class="kw">fn </span>arrow_schema_for_schema_to_arrow_schema_test() -> ArrowSchema {
+<a href=#1841 id=1841 data-nosnippet>1841</a> <span class="kw">let </span>fields = Fields::from(<span class="macro">vec!</span>[
+<a href=#1842 id=1842 data-nosnippet>1842</a> simple_field(<span class="string">"key"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"28"</span>),
+<a href=#1843 id=1843 data-nosnippet>1843</a> simple_field(<span class="string">"value"</span>, DataType::Utf8, <span class="bool-val">true</span>, <span class="string">"29"</span>),
+<a href=#1844 id=1844 data-nosnippet>1844</a> ]);
+<a href=#1845 id=1845 data-nosnippet>1845</a>
+<a href=#1846 id=1846 data-nosnippet>1846</a> <span class="kw">let </span>r#struct = DataType::Struct(fields);
+<a href=#1847 id=1847 data-nosnippet>1847</a> <span class="kw">let </span>map = DataType::Map(
+<a href=#1848 id=1848 data-nosnippet>1848</a> Arc::new(Field::new(DEFAULT_MAP_FIELD_NAME, r#struct, <span class="bool-val">false</span>)),
+<a href=#1849 id=1849 data-nosnippet>1849</a> <span class="bool-val">false</span>,
+<a href=#1850 id=1850 data-nosnippet>1850</a> );
+<a href=#1851 id=1851 data-nosnippet>1851</a>
+<a href=#1852 id=1852 data-nosnippet>1852</a> <span class="kw">let </span>fields = Fields::from(<span class="macro">vec!</span>[
+<a href=#1853 id=1853 data-nosnippet>1853</a> simple_field(<span class="string">"aa"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"18"</span>),
+<a href=#1854 id=1854 data-nosnippet>1854</a> simple_field(<span class="string">"bb"</span>, DataType::Utf8, <span class="bool-val">true</span>, <span class="string">"19"</span>),
+<a href=#1855 id=1855 data-nosnippet>1855</a> simple_field(
+<a href=#1856 id=1856 data-nosnippet>1856</a> <span class="string">"cc"</span>,
+<a href=#1857 id=1857 data-nosnippet>1857</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">None</span>),
+<a href=#1858 id=1858 data-nosnippet>1858</a> <span class="bool-val">false</span>,
+<a href=#1859 id=1859 data-nosnippet>1859</a> <span class="string">"20"</span>,
+<a href=#1860 id=1860 data-nosnippet>1860</a> ),
+<a href=#1861 id=1861 data-nosnippet>1861</a> ]);
+<a href=#1862 id=1862 data-nosnippet>1862</a>
+<a href=#1863 id=1863 data-nosnippet>1863</a> <span class="kw">let </span>r#struct = DataType::Struct(fields);
+<a href=#1864 id=1864 data-nosnippet>1864</a>
+<a href=#1865 id=1865 data-nosnippet>1865</a> ArrowSchema::new(<span class="macro">vec!</span>[
+<a href=#1866 id=1866 data-nosnippet>1866</a> simple_field(<span class="string">"a"</span>, DataType::Int32, <span class="bool-val">false</span>, <span class="string">"2"</span>),
+<a href=#1867 id=1867 data-nosnippet>1867</a> simple_field(<span class="string">"b"</span>, DataType::Int64, <span class="bool-val">false</span>, <span class="string">"1"</span>),
+<a href=#1868 id=1868 data-nosnippet>1868</a> simple_field(<span class="string">"c"</span>, DataType::Utf8, <span class="bool-val">false</span>, <span class="string">"3"</span>),
+<a href=#1869 id=1869 data-nosnippet>1869</a> simple_field(<span class="string">"n"</span>, DataType::Utf8, <span class="bool-val">false</span>, <span class="string">"21"</span>),
+<a href=#1870 id=1870 data-nosnippet>1870</a> simple_field(
+<a href=#1871 id=1871 data-nosnippet>1871</a> <span class="string">"d"</span>,
+<a href=#1872 id=1872 data-nosnippet>1872</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">None</span>),
+<a href=#1873 id=1873 data-nosnippet>1873</a> <span class="bool-val">true</span>,
+<a href=#1874 id=1874 data-nosnippet>1874</a> <span class="string">"4"</span>,
+<a href=#1875 id=1875 data-nosnippet>1875</a> ),
+<a href=#1876 id=1876 data-nosnippet>1876</a> simple_field(<span class="string">"e"</span>, DataType::Boolean, <span class="bool-val">true</span>, <span class="string">"6"</span>),
+<a href=#1877 id=1877 data-nosnippet>1877</a> simple_field(<span class="string">"f"</span>, DataType::Float32, <span class="bool-val">false</span>, <span class="string">"5"</span>),
+<a href=#1878 id=1878 data-nosnippet>1878</a> simple_field(<span class="string">"g"</span>, DataType::Float64, <span class="bool-val">false</span>, <span class="string">"7"</span>),
+<a href=#1879 id=1879 data-nosnippet>1879</a> simple_field(<span class="string">"p"</span>, DataType::Decimal128(<span class="number">10</span>, <span class="number">2</span>), <span class="bool-val">false</span>, <span class="string">"27"</span>),
+<a href=#1880 id=1880 data-nosnippet>1880</a> simple_field(<span class="string">"h"</span>, DataType::Date32, <span class="bool-val">false</span>, <span class="string">"8"</span>),
+<a href=#1881 id=1881 data-nosnippet>1881</a> simple_field(<span class="string">"i"</span>, DataType::Time64(TimeUnit::Microsecond), <span class="bool-val">false</span>, <span class="string">"9"</span>),
+<a href=#1882 id=1882 data-nosnippet>1882</a> simple_field(
+<a href=#1883 id=1883 data-nosnippet>1883</a> <span class="string">"j"</span>,
+<a href=#1884 id=1884 data-nosnippet>1884</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
+<a href=#1885 id=1885 data-nosnippet>1885</a> <span class="bool-val">false</span>,
+<a href=#1886 id=1886 data-nosnippet>1886</a> <span class="string">"10"</span>,
+<a href=#1887 id=1887 data-nosnippet>1887</a> ),
+<a href=#1888 id=1888 data-nosnippet>1888</a> simple_field(
+<a href=#1889 id=1889 data-nosnippet>1889</a> <span class="string">"k"</span>,
+<a href=#1890 id=1890 data-nosnippet>1890</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
+<a href=#1891 id=1891 data-nosnippet>1891</a> <span class="bool-val">false</span>,
+<a href=#1892 id=1892 data-nosnippet>1892</a> <span class="string">"12"</span>,
+<a href=#1893 id=1893 data-nosnippet>1893</a> ),
+<a href=#1894 id=1894 data-nosnippet>1894</a> simple_field(<span class="string">"l"</span>, DataType::LargeBinary, <span class="bool-val">false</span>, <span class="string">"13"</span>),
+<a href=#1895 id=1895 data-nosnippet>1895</a> simple_field(<span class="string">"o"</span>, DataType::LargeBinary, <span class="bool-val">false</span>, <span class="string">"22"</span>),
+<a href=#1896 id=1896 data-nosnippet>1896</a> simple_field(<span class="string">"m"</span>, DataType::FixedSizeBinary(<span class="number">10</span>), <span class="bool-val">false</span>, <span class="string">"11"</span>),
+<a href=#1897 id=1897 data-nosnippet>1897</a> simple_field(
+<a href=#1898 id=1898 data-nosnippet>1898</a> <span class="string">"list"</span>,
+<a href=#1899 id=1899 data-nosnippet>1899</a> DataType::List(Arc::new(simple_field(
+<a href=#1900 id=1900 data-nosnippet>1900</a> <span class="string">"element"</span>,
+<a href=#1901 id=1901 data-nosnippet>1901</a> DataType::Int32,
+<a href=#1902 id=1902 data-nosnippet>1902</a> <span class="bool-val">false</span>,
+<a href=#1903 id=1903 data-nosnippet>1903</a> <span class="string">"15"</span>,
+<a href=#1904 id=1904 data-nosnippet>1904</a> ))),
+<a href=#1905 id=1905 data-nosnippet>1905</a> <span class="bool-val">true</span>,
+<a href=#1906 id=1906 data-nosnippet>1906</a> <span class="string">"14"</span>,
+<a href=#1907 id=1907 data-nosnippet>1907</a> ),
+<a href=#1908 id=1908 data-nosnippet>1908</a> simple_field(
+<a href=#1909 id=1909 data-nosnippet>1909</a> <span class="string">"large_list"</span>,
+<a href=#1910 id=1910 data-nosnippet>1910</a> DataType::List(Arc::new(simple_field(
+<a href=#1911 id=1911 data-nosnippet>1911</a> <span class="string">"element"</span>,
+<a href=#1912 id=1912 data-nosnippet>1912</a> DataType::Utf8,
+<a href=#1913 id=1913 data-nosnippet>1913</a> <span class="bool-val">false</span>,
+<a href=#1914 id=1914 data-nosnippet>1914</a> <span class="string">"23"</span>,
+<a href=#1915 id=1915 data-nosnippet>1915</a> ))),
+<a href=#1916 id=1916 data-nosnippet>1916</a> <span class="bool-val">true</span>,
+<a href=#1917 id=1917 data-nosnippet>1917</a> <span class="string">"24"</span>,
+<a href=#1918 id=1918 data-nosnippet>1918</a> ),
+<a href=#1919 id=1919 data-nosnippet>1919</a> simple_field(
+<a href=#1920 id=1920 data-nosnippet>1920</a> <span class="string">"fixed_list"</span>,
+<a href=#1921 id=1921 data-nosnippet>1921</a> DataType::List(Arc::new(simple_field(
+<a href=#1922 id=1922 data-nosnippet>1922</a> <span class="string">"element"</span>,
+<a href=#1923 id=1923 data-nosnippet>1923</a> DataType::LargeBinary,
+<a href=#1924 id=1924 data-nosnippet>1924</a> <span class="bool-val">false</span>,
+<a href=#1925 id=1925 data-nosnippet>1925</a> <span class="string">"26"</span>,
+<a href=#1926 id=1926 data-nosnippet>1926</a> ))),
+<a href=#1927 id=1927 data-nosnippet>1927</a> <span class="bool-val">true</span>,
+<a href=#1928 id=1928 data-nosnippet>1928</a> <span class="string">"25"</span>,
+<a href=#1929 id=1929 data-nosnippet>1929</a> ),
+<a href=#1930 id=1930 data-nosnippet>1930</a> simple_field(<span class="string">"map"</span>, map, <span class="bool-val">false</span>, <span class="string">"16"</span>),
+<a href=#1931 id=1931 data-nosnippet>1931</a> simple_field(<span class="string">"struct"</span>, r#struct, <span class="bool-val">false</span>, <span class="string">"17"</span>),
+<a href=#1932 id=1932 data-nosnippet>1932</a> simple_field(<span class="string">"uuid"</span>, DataType::FixedSizeBinary(<span class="number">16</span>), <span class="bool-val">false</span>, <span class="string">"30"</span>)
+<a href=#1933 id=1933 data-nosnippet>1933</a> .with_extension_type(UuidExtensionType),
+<a href=#1934 id=1934 data-nosnippet>1934</a> Field::new(
+<a href=#1935 id=1935 data-nosnippet>1935</a> <span class="string">"v"</span>,
+<a href=#1936 id=1936 data-nosnippet>1936</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[
+<a href=#1937 id=1937 data-nosnippet>1937</a> Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>),
+<a href=#1938 id=1938 data-nosnippet>1938</a> Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>),
+<a href=#1939 id=1939 data-nosnippet>1939</a> ])),
+<a href=#1940 id=1940 data-nosnippet>1940</a> <span class="bool-val">true</span>,
+<a href=#1941 id=1941 data-nosnippet>1941</a> )
+<a href=#1942 id=1942 data-nosnippet>1942</a> .with_metadata(HashMap::from([
+<a href=#1943 id=1943 data-nosnippet>1943</a> (PARQUET_FIELD_ID_META_KEY.to_string(), <span class="string">"31"</span>.to_string()),
+<a href=#1944 id=1944 data-nosnippet>1944</a> (
+<a href=#1945 id=1945 data-nosnippet>1945</a> arrow_schema::extension::EXTENSION_TYPE_NAME_KEY.to_string(),
+<a href=#1946 id=1946 data-nosnippet>1946</a> <span class="string">"arrow.parquet.variant"</span>.to_string(),
+<a href=#1947 id=1947 data-nosnippet>1947</a> ),
+<a href=#1948 id=1948 data-nosnippet>1948</a> ])),
+<a href=#1949 id=1949 data-nosnippet>1949</a> ])
+<a href=#1950 id=1950 data-nosnippet>1950</a> }
+<a href=#1951 id=1951 data-nosnippet>1951</a>
+<a href=#1952 id=1952 data-nosnippet>1952</a> <span class="kw">fn </span>iceberg_schema_for_schema_to_arrow_schema() -> Schema {
+<a href=#1953 id=1953 data-nosnippet>1953</a> <span class="kw">let </span>schema_json = <span class="string">r#"{
+<a href=#1954 id=1954 data-nosnippet>1954</a> "type":"struct",
+<a href=#1955 id=1955 data-nosnippet>1955</a> "schema-id":0,
+<a href=#1956 id=1956 data-nosnippet>1956</a> "fields":[
+<a href=#1957 id=1957 data-nosnippet>1957</a> {
+<a href=#1958 id=1958 data-nosnippet>1958</a> "id":2,
+<a href=#1959 id=1959 data-nosnippet>1959</a> "name":"a",
+<a href=#1960 id=1960 data-nosnippet>1960</a> "required":true,
+<a href=#1961 id=1961 data-nosnippet>1961</a> "type":"int"
+<a href=#1962 id=1962 data-nosnippet>1962</a> },
+<a href=#1963 id=1963 data-nosnippet>1963</a> {
+<a href=#1964 id=1964 data-nosnippet>1964</a> "id":1,
+<a href=#1965 id=1965 data-nosnippet>1965</a> "name":"b",
+<a href=#1966 id=1966 data-nosnippet>1966</a> "required":true,
+<a href=#1967 id=1967 data-nosnippet>1967</a> "type":"long"
+<a href=#1968 id=1968 data-nosnippet>1968</a> },
+<a href=#1969 id=1969 data-nosnippet>1969</a> {
+<a href=#1970 id=1970 data-nosnippet>1970</a> "id":3,
+<a href=#1971 id=1971 data-nosnippet>1971</a> "name":"c",
+<a href=#1972 id=1972 data-nosnippet>1972</a> "required":true,
+<a href=#1973 id=1973 data-nosnippet>1973</a> "type":"string"
+<a href=#1974 id=1974 data-nosnippet>1974</a> },
+<a href=#1975 id=1975 data-nosnippet>1975</a> {
+<a href=#1976 id=1976 data-nosnippet>1976</a> "id":21,
+<a href=#1977 id=1977 data-nosnippet>1977</a> "name":"n",
+<a href=#1978 id=1978 data-nosnippet>1978</a> "required":true,
+<a href=#1979 id=1979 data-nosnippet>1979</a> "type":"string"
+<a href=#1980 id=1980 data-nosnippet>1980</a> },
+<a href=#1981 id=1981 data-nosnippet>1981</a> {
+<a href=#1982 id=1982 data-nosnippet>1982</a> "id":4,
+<a href=#1983 id=1983 data-nosnippet>1983</a> "name":"d",
+<a href=#1984 id=1984 data-nosnippet>1984</a> "required":false,
+<a href=#1985 id=1985 data-nosnippet>1985</a> "type":"timestamp"
+<a href=#1986 id=1986 data-nosnippet>1986</a> },
+<a href=#1987 id=1987 data-nosnippet>1987</a> {
+<a href=#1988 id=1988 data-nosnippet>1988</a> "id":6,
+<a href=#1989 id=1989 data-nosnippet>1989</a> "name":"e",
+<a href=#1990 id=1990 data-nosnippet>1990</a> "required":false,
+<a href=#1991 id=1991 data-nosnippet>1991</a> "type":"boolean"
+<a href=#1992 id=1992 data-nosnippet>1992</a> },
+<a href=#1993 id=1993 data-nosnippet>1993</a> {
+<a href=#1994 id=1994 data-nosnippet>1994</a> "id":5,
+<a href=#1995 id=1995 data-nosnippet>1995</a> "name":"f",
+<a href=#1996 id=1996 data-nosnippet>1996</a> "required":true,
+<a href=#1997 id=1997 data-nosnippet>1997</a> "type":"float"
+<a href=#1998 id=1998 data-nosnippet>1998</a> },
+<a href=#1999 id=1999 data-nosnippet>1999</a> {
+<a href=#2000 id=2000 data-nosnippet>2000</a> "id":7,
+<a href=#2001 id=2001 data-nosnippet>2001</a> "name":"g",
+<a href=#2002 id=2002 data-nosnippet>2002</a> "required":true,
+<a href=#2003 id=2003 data-nosnippet>2003</a> "type":"double"
+<a href=#2004 id=2004 data-nosnippet>2004</a> },
+<a href=#2005 id=2005 data-nosnippet>2005</a> {
+<a href=#2006 id=2006 data-nosnippet>2006</a> "id":27,
+<a href=#2007 id=2007 data-nosnippet>2007</a> "name":"p",
+<a href=#2008 id=2008 data-nosnippet>2008</a> "required":true,
+<a href=#2009 id=2009 data-nosnippet>2009</a> "type":"decimal(10,2)"
+<a href=#2010 id=2010 data-nosnippet>2010</a> },
+<a href=#2011 id=2011 data-nosnippet>2011</a> {
+<a href=#2012 id=2012 data-nosnippet>2012</a> "id":8,
+<a href=#2013 id=2013 data-nosnippet>2013</a> "name":"h",
+<a href=#2014 id=2014 data-nosnippet>2014</a> "required":true,
+<a href=#2015 id=2015 data-nosnippet>2015</a> "type":"date"
+<a href=#2016 id=2016 data-nosnippet>2016</a> },
+<a href=#2017 id=2017 data-nosnippet>2017</a> {
+<a href=#2018 id=2018 data-nosnippet>2018</a> "id":9,
+<a href=#2019 id=2019 data-nosnippet>2019</a> "name":"i",
+<a href=#2020 id=2020 data-nosnippet>2020</a> "required":true,
+<a href=#2021 id=2021 data-nosnippet>2021</a> "type":"time"
+<a href=#2022 id=2022 data-nosnippet>2022</a> },
+<a href=#2023 id=2023 data-nosnippet>2023</a> {
+<a href=#2024 id=2024 data-nosnippet>2024</a> "id":10,
+<a href=#2025 id=2025 data-nosnippet>2025</a> "name":"j",
+<a href=#2026 id=2026 data-nosnippet>2026</a> "required":true,
+<a href=#2027 id=2027 data-nosnippet>2027</a> "type":"timestamptz"
+<a href=#2028 id=2028 data-nosnippet>2028</a> },
+<a href=#2029 id=2029 data-nosnippet>2029</a> {
+<a href=#2030 id=2030 data-nosnippet>2030</a> "id":12,
+<a href=#2031 id=2031 data-nosnippet>2031</a> "name":"k",
+<a href=#2032 id=2032 data-nosnippet>2032</a> "required":true,
+<a href=#2033 id=2033 data-nosnippet>2033</a> "type":"timestamptz"
+<a href=#2034 id=2034 data-nosnippet>2034</a> },
+<a href=#2035 id=2035 data-nosnippet>2035</a> {
+<a href=#2036 id=2036 data-nosnippet>2036</a> "id":13,
+<a href=#2037 id=2037 data-nosnippet>2037</a> "name":"l",
+<a href=#2038 id=2038 data-nosnippet>2038</a> "required":true,
+<a href=#2039 id=2039 data-nosnippet>2039</a> "type":"binary"
+<a href=#2040 id=2040 data-nosnippet>2040</a> },
+<a href=#2041 id=2041 data-nosnippet>2041</a> {
+<a href=#2042 id=2042 data-nosnippet>2042</a> "id":22,
+<a href=#2043 id=2043 data-nosnippet>2043</a> "name":"o",
+<a href=#2044 id=2044 data-nosnippet>2044</a> "required":true,
+<a href=#2045 id=2045 data-nosnippet>2045</a> "type":"binary"
+<a href=#2046 id=2046 data-nosnippet>2046</a> },
+<a href=#2047 id=2047 data-nosnippet>2047</a> {
+<a href=#2048 id=2048 data-nosnippet>2048</a> "id":11,
+<a href=#2049 id=2049 data-nosnippet>2049</a> "name":"m",
+<a href=#2050 id=2050 data-nosnippet>2050</a> "required":true,
+<a href=#2051 id=2051 data-nosnippet>2051</a> "type":"fixed[10]"
+<a href=#2052 id=2052 data-nosnippet>2052</a> },
+<a href=#2053 id=2053 data-nosnippet>2053</a> {
+<a href=#2054 id=2054 data-nosnippet>2054</a> "id":14,
+<a href=#2055 id=2055 data-nosnippet>2055</a> "name":"list",
+<a href=#2056 id=2056 data-nosnippet>2056</a> "required": false,
+<a href=#2057 id=2057 data-nosnippet>2057</a> "type": {
+<a href=#2058 id=2058 data-nosnippet>2058</a> "type": "list",
+<a href=#2059 id=2059 data-nosnippet>2059</a> "element-id": 15,
+<a href=#2060 id=2060 data-nosnippet>2060</a> "element-required": true,
+<a href=#2061 id=2061 data-nosnippet>2061</a> "element": "int"
+<a href=#2062 id=2062 data-nosnippet>2062</a> }
+<a href=#2063 id=2063 data-nosnippet>2063</a> },
+<a href=#2064 id=2064 data-nosnippet>2064</a> {
+<a href=#2065 id=2065 data-nosnippet>2065</a> "id":24,
+<a href=#2066 id=2066 data-nosnippet>2066</a> "name":"large_list",
+<a href=#2067 id=2067 data-nosnippet>2067</a> "required": false,
+<a href=#2068 id=2068 data-nosnippet>2068</a> "type": {
+<a href=#2069 id=2069 data-nosnippet>2069</a> "type": "list",
+<a href=#2070 id=2070 data-nosnippet>2070</a> "element-id": 23,
+<a href=#2071 id=2071 data-nosnippet>2071</a> "element-required": true,
+<a href=#2072 id=2072 data-nosnippet>2072</a> "element": "string"
+<a href=#2073 id=2073 data-nosnippet>2073</a> }
+<a href=#2074 id=2074 data-nosnippet>2074</a> },
+<a href=#2075 id=2075 data-nosnippet>2075</a> {
+<a href=#2076 id=2076 data-nosnippet>2076</a> "id":25,
+<a href=#2077 id=2077 data-nosnippet>2077</a> "name":"fixed_list",
+<a href=#2078 id=2078 data-nosnippet>2078</a> "required": false,
+<a href=#2079 id=2079 data-nosnippet>2079</a> "type": {
+<a href=#2080 id=2080 data-nosnippet>2080</a> "type": "list",
+<a href=#2081 id=2081 data-nosnippet>2081</a> "element-id": 26,
+<a href=#2082 id=2082 data-nosnippet>2082</a> "element-required": true,
+<a href=#2083 id=2083 data-nosnippet>2083</a> "element": "binary"
+<a href=#2084 id=2084 data-nosnippet>2084</a> }
+<a href=#2085 id=2085 data-nosnippet>2085</a> },
+<a href=#2086 id=2086 data-nosnippet>2086</a> {
+<a href=#2087 id=2087 data-nosnippet>2087</a> "id":16,
+<a href=#2088 id=2088 data-nosnippet>2088</a> "name":"map",
+<a href=#2089 id=2089 data-nosnippet>2089</a> "required": true,
+<a href=#2090 id=2090 data-nosnippet>2090</a> "type": {
+<a href=#2091 id=2091 data-nosnippet>2091</a> "type": "map",
+<a href=#2092 id=2092 data-nosnippet>2092</a> "key-id": 28,
+<a href=#2093 id=2093 data-nosnippet>2093</a> "key": "int",
+<a href=#2094 id=2094 data-nosnippet>2094</a> "value-id": 29,
+<a href=#2095 id=2095 data-nosnippet>2095</a> "value-required": false,
+<a href=#2096 id=2096 data-nosnippet>2096</a> "value": "string"
+<a href=#2097 id=2097 data-nosnippet>2097</a> }
+<a href=#2098 id=2098 data-nosnippet>2098</a> },
+<a href=#2099 id=2099 data-nosnippet>2099</a> {
+<a href=#2100 id=2100 data-nosnippet>2100</a> "id":17,
+<a href=#2101 id=2101 data-nosnippet>2101</a> "name":"struct",
+<a href=#2102 id=2102 data-nosnippet>2102</a> "required": true,
+<a href=#2103 id=2103 data-nosnippet>2103</a> "type": {
+<a href=#2104 id=2104 data-nosnippet>2104</a> "type": "struct",
+<a href=#2105 id=2105 data-nosnippet>2105</a> "fields": [
+<a href=#2106 id=2106 data-nosnippet>2106</a> {
+<a href=#2107 id=2107 data-nosnippet>2107</a> "id":18,
+<a href=#2108 id=2108 data-nosnippet>2108</a> "name":"aa",
+<a href=#2109 id=2109 data-nosnippet>2109</a> "required":true,
+<a href=#2110 id=2110 data-nosnippet>2110</a> "type":"int"
+<a href=#2111 id=2111 data-nosnippet>2111</a> },
+<a href=#2112 id=2112 data-nosnippet>2112</a> {
+<a href=#2113 id=2113 data-nosnippet>2113</a> "id":19,
+<a href=#2114 id=2114 data-nosnippet>2114</a> "name":"bb",
+<a href=#2115 id=2115 data-nosnippet>2115</a> "required":false,
+<a href=#2116 id=2116 data-nosnippet>2116</a> "type":"string"
+<a href=#2117 id=2117 data-nosnippet>2117</a> },
+<a href=#2118 id=2118 data-nosnippet>2118</a> {
+<a href=#2119 id=2119 data-nosnippet>2119</a> "id":20,
+<a href=#2120 id=2120 data-nosnippet>2120</a> "name":"cc",
+<a href=#2121 id=2121 data-nosnippet>2121</a> "required":true,
+<a href=#2122 id=2122 data-nosnippet>2122</a> "type":"timestamp"
+<a href=#2123 id=2123 data-nosnippet>2123</a> }
+<a href=#2124 id=2124 data-nosnippet>2124</a> ]
+<a href=#2125 id=2125 data-nosnippet>2125</a> }
+<a href=#2126 id=2126 data-nosnippet>2126</a> },
+<a href=#2127 id=2127 data-nosnippet>2127</a> {
+<a href=#2128 id=2128 data-nosnippet>2128</a> "id":30,
+<a href=#2129 id=2129 data-nosnippet>2129</a> "name":"uuid",
+<a href=#2130 id=2130 data-nosnippet>2130</a> "required":true,
+<a href=#2131 id=2131 data-nosnippet>2131</a> "type":"uuid"
+<a href=#2132 id=2132 data-nosnippet>2132</a> },
+<a href=#2133 id=2133 data-nosnippet>2133</a> {
+<a href=#2134 id=2134 data-nosnippet>2134</a> "id":31,
+<a href=#2135 id=2135 data-nosnippet>2135</a> "name":"v",
+<a href=#2136 id=2136 data-nosnippet>2136</a> "required":false,
+<a href=#2137 id=2137 data-nosnippet>2137</a> "type":"variant"
+<a href=#2138 id=2138 data-nosnippet>2138</a> }
+<a href=#2139 id=2139 data-nosnippet>2139</a> ],
+<a href=#2140 id=2140 data-nosnippet>2140</a> "identifier-field-ids":[]
+<a href=#2141 id=2141 data-nosnippet>2141</a> }"#</span>;
+<a href=#2142 id=2142 data-nosnippet>2142</a>
+<a href=#2143 id=2143 data-nosnippet>2143</a> <span class="kw">let </span>schema: Schema = serde_json::from_str(schema_json).unwrap();
+<a href=#2144 id=2144 data-nosnippet>2144</a> schema
+<a href=#2145 id=2145 data-nosnippet>2145</a> }
+<a href=#2146 id=2146 data-nosnippet>2146</a>
+<a href=#2147 id=2147 data-nosnippet>2147</a> <span class="attr">#[test]
+<a href=#2148 id=2148 data-nosnippet>2148</a> </span><span class="kw">fn </span>test_schema_to_arrow_schema() {
+<a href=#2149 id=2149 data-nosnippet>2149</a> <span class="kw">let </span>expected_arrow_schema = arrow_schema_for_schema_to_arrow_schema_test();
+<a href=#2150 id=2150 data-nosnippet>2150</a> <span class="kw">let </span>schema = iceberg_schema_for_schema_to_arrow_schema();
+<a href=#2151 id=2151 data-nosnippet>2151</a> <span class="kw">let </span>converted_arrow_schema = schema_to_arrow_schema(<span class="kw-2">&</span>schema).unwrap();
+<a href=#2152 id=2152 data-nosnippet>2152</a> <span class="macro">assert_eq!</span>(converted_arrow_schema, expected_arrow_schema);
+<a href=#2153 id=2153 data-nosnippet>2153</a> }
+<a href=#2154 id=2154 data-nosnippet>2154</a>
+<a href=#2155 id=2155 data-nosnippet>2155</a> <span class="attr">#[test]
+<a href=#2156 id=2156 data-nosnippet>2156</a> </span><span class="kw">fn </span>test_variant_type_to_arrow_type() {
+<a href=#2157 id=2157 data-nosnippet>2157</a> <span class="comment">// Variant maps to a struct with a required `metadata` and a nullable `value` binary
+<a href=#2158 id=2158 data-nosnippet>2158</a> // field, with no field ids on the sub-fields, matching the Parquet BINARY layout.
+<a href=#2159 id=2159 data-nosnippet>2159</a> </span><span class="kw">let </span>arrow_type = type_to_arrow_type(<span class="kw-2">&</span>Type::Variant(VariantType)).unwrap();
+<a href=#2160 id=2160 data-nosnippet>2160</a> <span class="macro">assert_eq!</span>(
+<a href=#2161 id=2161 data-nosnippet>2161</a> arrow_type,
+<a href=#2162 id=2162 data-nosnippet>2162</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[
+<a href=#2163 id=2163 data-nosnippet>2163</a> Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>),
+<a href=#2164 id=2164 data-nosnippet>2164</a> Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>),
+<a href=#2165 id=2165 data-nosnippet>2165</a> ]))
+<a href=#2166 id=2166 data-nosnippet>2166</a> );
+<a href=#2167 id=2167 data-nosnippet>2167</a> }
+<a href=#2168 id=2168 data-nosnippet>2168</a>
+<a href=#2169 id=2169 data-nosnippet>2169</a> <span class="attr">#[test]
+<a href=#2170 id=2170 data-nosnippet>2170</a> </span><span class="kw">fn </span>test_variant_field_carries_arrow_extension_type() {
+<a href=#2171 id=2171 data-nosnippet>2171</a> <span class="comment">// Converting a schema with a variant column tags the column's field with the
+<a href=#2172 id=2172 data-nosnippet>2172</a> // canonical `arrow.parquet.variant` extension type (the struct storage stays as-is).
+<a href=#2173 id=2173 data-nosnippet>2173</a> </span><span class="kw">let </span>schema = Schema::builder()
+<a href=#2174 id=2174 data-nosnippet>2174</a> .with_fields(<span class="macro">vec!</span>[
+<a href=#2175 id=2175 data-nosnippet>2175</a> NestedField::optional(<span class="number">1</span>, <span class="string">"v"</span>, Type::Variant(VariantType)).into(),
+<a href=#2176 id=2176 data-nosnippet>2176</a> ])
+<a href=#2177 id=2177 data-nosnippet>2177</a> .build()
+<a href=#2178 id=2178 data-nosnippet>2178</a> .unwrap();
<a href=#2179 id=2179 data-nosnippet>2179</a>
-<a href=#2180 id=2180 data-nosnippet>2180</a> <span class="kw">let </span>converted = arrow_schema_to_schema_auto_assign_ids(<span class="kw-2">&</span>arrow_schema).unwrap();
-<a href=#2181 id=2181 data-nosnippet>2181</a> <span class="kw">let </span>expected = Schema::builder()
-<a href=#2182 id=2182 data-nosnippet>2182</a> .with_fields(<span class="macro">vec!</span>[
-<a href=#2183 id=2183 data-nosnippet>2183</a> NestedField::optional(<span class="number">1</span>, <span class="string">"v"</span>, Type::Variant(VariantType)).into(),
-<a href=#2184 id=2184 data-nosnippet>2184</a> ])
-<a href=#2185 id=2185 data-nosnippet>2185</a> .build()
-<a href=#2186 id=2186 data-nosnippet>2186</a> .unwrap();
-<a href=#2187 id=2187 data-nosnippet>2187</a> <span class="macro">pretty_assertions::assert_eq!</span>(converted, expected);
-<a href=#2188 id=2188 data-nosnippet>2188</a> }
-<a href=#2189 id=2189 data-nosnippet>2189</a>
-<a href=#2190 id=2190 data-nosnippet>2190</a> <span class="attr">#[test]
-<a href=#2191 id=2191 data-nosnippet>2191</a> </span><span class="kw">fn </span>test_variant_extension_on_non_struct_storage_is_rejected() {
-<a href=#2192 id=2192 data-nosnippet>2192</a> <span class="comment">// The extension may only sit on struct storage. A hand-injected tag on a
-<a href=#2193 id=2193 data-nosnippet>2193</a> // non-struct field is rejected rather than silently reinterpreted as a variant.
-<a href=#2194 id=2194 data-nosnippet>2194</a> </span><span class="kw">let </span>field = Field::new(<span class="string">"v"</span>, DataType::Int32, <span class="bool-val">true</span>).with_metadata(HashMap::from([
-<a href=#2195 id=2195 data-nosnippet>2195</a> (PARQUET_FIELD_ID_META_KEY.to_string(), <span class="string">"1"</span>.to_string()),
-<a href=#2196 id=2196 data-nosnippet>2196</a> (
-<a href=#2197 id=2197 data-nosnippet>2197</a> arrow_schema::extension::EXTENSION_TYPE_NAME_KEY.to_string(),
-<a href=#2198 id=2198 data-nosnippet>2198</a> VariantExtensionType::NAME.to_string(),
-<a href=#2199 id=2199 data-nosnippet>2199</a> ),
-<a href=#2200 id=2200 data-nosnippet>2200</a> ]));
-<a href=#2201 id=2201 data-nosnippet>2201</a> <span class="kw">let </span>arrow_schema = ArrowSchema::new(<span class="macro">vec!</span>[field]);
-<a href=#2202 id=2202 data-nosnippet>2202</a>
-<a href=#2203 id=2203 data-nosnippet>2203</a> <span class="kw">let </span>err = arrow_schema_to_schema(<span class="kw-2">&</span>arrow_schema).unwrap_err();
-<a href=#2204 id=2204 data-nosnippet>2204</a> <span class="macro">assert!</span>(
-<a href=#2205 id=2205 data-nosnippet>2205</a> err.to_string().contains(<span class="string">"requires Struct storage"</span>),
-<a href=#2206 id=2206 data-nosnippet>2206</a> <span class="string">"unexpected error: {err}"
-<a href=#2207 id=2207 data-nosnippet>2207</a> </span>);
-<a href=#2208 id=2208 data-nosnippet>2208</a> }
+<a href=#2180 id=2180 data-nosnippet>2180</a> <span class="kw">let </span>arrow_schema = schema_to_arrow_schema(<span class="kw-2">&</span>schema).unwrap();
+<a href=#2181 id=2181 data-nosnippet>2181</a> <span class="kw">let </span>field = arrow_schema.field_with_name(<span class="string">"v"</span>).unwrap();
+<a href=#2182 id=2182 data-nosnippet>2182</a>
+<a href=#2183 id=2183 data-nosnippet>2183</a> <span class="macro">assert_eq!</span>(field.extension_type_name(), <span class="prelude-val">Some</span>(<span class="string">"arrow.parquet.variant"</span>));
+<a href=#2184 id=2184 data-nosnippet>2184</a> <span class="comment">// Attaching the extension type must not clobber the Iceberg field id.
+<a href=#2185 id=2185 data-nosnippet>2185</a> </span><span class="macro">assert_eq!</span>(
+<a href=#2186 id=2186 data-nosnippet>2186</a> field.metadata().get(PARQUET_FIELD_ID_META_KEY),
+<a href=#2187 id=2187 data-nosnippet>2187</a> <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="string">"1"</span>.to_string())
+<a href=#2188 id=2188 data-nosnippet>2188</a> );
+<a href=#2189 id=2189 data-nosnippet>2189</a> <span class="macro">assert_eq!</span>(
+<a href=#2190 id=2190 data-nosnippet>2190</a> field.data_type(),
+<a href=#2191 id=2191 data-nosnippet>2191</a> <span class="kw-2">&</span>DataType::Struct(Fields::from(<span class="macro">vec!</span>[
+<a href=#2192 id=2192 data-nosnippet>2192</a> Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>),
+<a href=#2193 id=2193 data-nosnippet>2193</a> Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>),
+<a href=#2194 id=2194 data-nosnippet>2194</a> ]))
+<a href=#2195 id=2195 data-nosnippet>2195</a> );
+<a href=#2196 id=2196 data-nosnippet>2196</a> }
+<a href=#2197 id=2197 data-nosnippet>2197</a>
+<a href=#2198 id=2198 data-nosnippet>2198</a> <span class="attr">#[test]
+<a href=#2199 id=2199 data-nosnippet>2199</a> </span><span class="kw">fn </span>test_schema_to_arrow_schema_should_convert_uuid_to_arrow_uuid() {
+<a href=#2200 id=2200 data-nosnippet>2200</a> <span class="kw">let </span>schema = Schema::builder()
+<a href=#2201 id=2201 data-nosnippet>2201</a> .with_fields(<span class="macro">vec!</span>[
+<a href=#2202 id=2202 data-nosnippet>2202</a> NestedField::optional(<span class="number">1</span>, <span class="string">"uuid_field"</span>, Type::Primitive(PrimitiveType::Uuid)).into(),
+<a href=#2203 id=2203 data-nosnippet>2203</a> ])
+<a href=#2204 id=2204 data-nosnippet>2204</a> .build()
+<a href=#2205 id=2205 data-nosnippet>2205</a> .unwrap();
+<a href=#2206 id=2206 data-nosnippet>2206</a>
+<a href=#2207 id=2207 data-nosnippet>2207</a> <span class="kw">let </span>arrow_schema = schema_to_arrow_schema(<span class="kw-2">&</span>schema).unwrap();
+<a href=#2208 id=2208 data-nosnippet>2208</a> <span class="kw">let </span>field = arrow_schema.field_with_name(<span class="string">"uuid_field"</span>).unwrap();
<a href=#2209 id=2209 data-nosnippet>2209</a>
-<a href=#2210 id=2210 data-nosnippet>2210</a> <span class="attr">#[test]
-<a href=#2211 id=2211 data-nosnippet>2211</a> </span><span class="kw">fn </span>test_type_conversion() {
-<a href=#2212 id=2212 data-nosnippet>2212</a> <span class="comment">// test primitive type
-<a href=#2213 id=2213 data-nosnippet>2213</a> </span>{
-<a href=#2214 id=2214 data-nosnippet>2214</a> <span class="kw">let </span>arrow_type = DataType::Int32;
-<a href=#2215 id=2215 data-nosnippet>2215</a> <span class="kw">let </span>iceberg_type = Type::Primitive(PrimitiveType::Int);
-<a href=#2216 id=2216 data-nosnippet>2216</a> <span class="macro">assert_eq!</span>(arrow_type, type_to_arrow_type(<span class="kw-2">&</span>iceberg_type).unwrap());
-<a href=#2217 id=2217 data-nosnippet>2217</a> <span class="macro">assert_eq!</span>(iceberg_type, arrow_type_to_type(<span class="kw-2">&</span>arrow_type).unwrap());
-<a href=#2218 id=2218 data-nosnippet>2218</a> }
-<a href=#2219 id=2219 data-nosnippet>2219</a>
-<a href=#2220 id=2220 data-nosnippet>2220</a> {
-<a href=#2221 id=2221 data-nosnippet>2221</a> <span class="kw">let </span>arrow_type = DataType::Null;
-<a href=#2222 id=2222 data-nosnippet>2222</a> <span class="kw">let </span>iceberg_type = Type::Primitive(PrimitiveType::Unknown);
-<a href=#2223 id=2223 data-nosnippet>2223</a> <span class="macro">assert_eq!</span>(arrow_type, type_to_arrow_type(<span class="kw-2">&</span>iceberg_type).unwrap());
-<a href=#2224 id=2224 data-nosnippet>2224</a> <span class="macro">assert_eq!</span>(iceberg_type, arrow_type_to_type(<span class="kw-2">&</span>arrow_type).unwrap());
-<a href=#2225 id=2225 data-nosnippet>2225</a> }
-<a href=#2226 id=2226 data-nosnippet>2226</a>
-<a href=#2227 id=2227 data-nosnippet>2227</a> <span class="comment">// test struct type
-<a href=#2228 id=2228 data-nosnippet>2228</a> </span>{
-<a href=#2229 id=2229 data-nosnippet>2229</a> <span class="comment">// no metadata will cause error
-<a href=#2230 id=2230 data-nosnippet>2230</a> </span><span class="kw">let </span>arrow_type = DataType::Struct(Fields::from(<span class="macro">vec!</span>[
-<a href=#2231 id=2231 data-nosnippet>2231</a> Field::new(<span class="string">"a"</span>, DataType::Int64, <span class="bool-val">false</span>),
-<a href=#2232 id=2232 data-nosnippet>2232</a> Field::new(<span class="string">"b"</span>, DataType::Utf8, <span class="bool-val">true</span>),
-<a href=#2233 id=2233 data-nosnippet>2233</a> ]));
-<a href=#2234 id=2234 data-nosnippet>2234</a> <span class="macro">assert_eq!</span>(
-<a href=#2235 id=2235 data-nosnippet>2235</a> <span class="kw-2">&</span>arrow_type_to_type(<span class="kw-2">&</span>arrow_type).unwrap_err().to_string(),
-<a href=#2236 id=2236 data-nosnippet>2236</a> <span class="string">"DataInvalid => Field id not found in metadata"
-<a href=#2237 id=2237 data-nosnippet>2237</a> </span>);
-<a href=#2238 id=2238 data-nosnippet>2238</a>
-<a href=#2239 id=2239 data-nosnippet>2239</a> <span class="kw">let </span>arrow_type = DataType::Struct(Fields::from(<span class="macro">vec!</span>[
-<a href=#2240 id=2240 data-nosnippet>2240</a> Field::new(<span class="string">"a"</span>, DataType::Int64, <span class="bool-val">false</span>).with_metadata(HashMap::from_iter([(
-<a href=#2241 id=2241 data-nosnippet>2241</a> PARQUET_FIELD_ID_META_KEY.to_string(),
-<a href=#2242 id=2242 data-nosnippet>2242</a> <span class="number">1</span>.to_string(),
-<a href=#2243 id=2243 data-nosnippet>2243</a> )])),
-<a href=#2244 id=2244 data-nosnippet>2244</a> Field::new(<span class="string">"b"</span>, DataType::Utf8, <span class="bool-val">true</span>).with_metadata(HashMap::from_iter([(
-<a href=#2245 id=2245 data-nosnippet>2245</a> PARQUET_FIELD_ID_META_KEY.to_string(),
-<a href=#2246 id=2246 data-nosnippet>2246</a> <span class="number">2</span>.to_string(),
-<a href=#2247 id=2247 data-nosnippet>2247</a> )])),
-<a href=#2248 id=2248 data-nosnippet>2248</a> ]));
-<a href=#2249 id=2249 data-nosnippet>2249</a> <span class="kw">let </span>iceberg_type = Type::Struct(StructType::new(<span class="macro">vec!</span>[
-<a href=#2250 id=2250 data-nosnippet>2250</a> NestedField {
-<a href=#2251 id=2251 data-nosnippet>2251</a> id: <span class="number">1</span>,
-<a href=#2252 id=2252 data-nosnippet>2252</a> doc: <span class="prelude-val">None</span>,
-<a href=#2253 id=2253 data-nosnippet>2253</a> name: <span class="string">"a"</span>.to_string(),
-<a href=#2254 id=2254 data-nosnippet>2254</a> required: <span class="bool-val">true</span>,
-<a href=#2255 id=2255 data-nosnippet>2255</a> field_type: Box::new(Type::Primitive(PrimitiveType::Long)),
-<a href=#2256 id=2256 data-nosnippet>2256</a> initial_default: <span class="prelude-val">None</span>,
-<a href=#2257 id=2257 data-nosnippet>2257</a> write_default: <span class="prelude-val">None</span>,
-<a href=#2258 id=2258 data-nosnippet>2258</a> }
-<a href=#2259 id=2259 data-nosnippet>2259</a> .into(),
-<a href=#2260 id=2260 data-nosnippet>2260</a> NestedField {
-<a href=#2261 id=2261 data-nosnippet>2261</a> id: <span class="number">2</span>,
-<a href=#2262 id=2262 data-nosnippet>2262</a> doc: <span class="prelude-val">None</span>,
-<a href=#2263 id=2263 data-nosnippet>2263</a> name: <span class="string">"b"</span>.to_string(),
-<a href=#2264 id=2264 data-nosnippet>2264</a> required: <span class="bool-val">false</span>,
-<a href=#2265 id=2265 data-nosnippet>2265</a> field_type: Box::new(Type::Primitive(PrimitiveType::String)),
-<a href=#2266 id=2266 data-nosnippet>2266</a> initial_default: <span class="prelude-val">None</span>,
-<a href=#2267 id=2267 data-nosnippet>2267</a> write_default: <span class="prelude-val">None</span>,
-<a href=#2268 id=2268 data-nosnippet>2268</a> }
-<a href=#2269 id=2269 data-nosnippet>2269</a> .into(),
-<a href=#2270 id=2270 data-nosnippet>2270</a> ]));
-<a href=#2271 id=2271 data-nosnippet>2271</a> <span class="macro">assert_eq!</span>(iceberg_type, arrow_type_to_type(<span class="kw-2">&</span>arrow_type).unwrap());
-<a href=#2272 id=2272 data-nosnippet>2272</a> <span class="macro">assert_eq!</span>(arrow_type, type_to_arrow_type(<span class="kw-2">&</span>iceberg_type).unwrap());
-<a href=#2273 id=2273 data-nosnippet>2273</a>
-<a href=#2274 id=2274 data-nosnippet>2274</a> <span class="comment">// initial_default and write_default is ignored
-<a href=#2275 id=2275 data-nosnippet>2275</a> </span><span class="kw">let </span>iceberg_type = Type::Struct(StructType::new(<span class="macro">vec!</span>[
-<a href=#2276 id=2276 data-nosnippet>2276</a> NestedField {
-<a href=#2277 id=2277 data-nosnippet>2277</a> id: <span class="number">1</span>,
-<a href=#2278 id=2278 data-nosnippet>2278</a> doc: <span class="prelude-val">None</span>,
-<a href=#2279 id=2279 data-nosnippet>2279</a> name: <span class="string">"a"</span>.to_string(),
-<a href=#2280 id=2280 data-nosnippet>2280</a> required: <span class="bool-val">true</span>,
-<a href=#2281 id=2281 data-nosnippet>2281</a> field_type: Box::new(Type::Primitive(PrimitiveType::Long)),
-<a href=#2282 id=2282 data-nosnippet>2282</a> initial_default: <span class="prelude-val">Some</span>(Literal::Primitive(PrimitiveLiteral::Int(<span class="number">114514</span>))),
-<a href=#2283 id=2283 data-nosnippet>2283</a> write_default: <span class="prelude-val">None</span>,
-<a href=#2284 id=2284 data-nosnippet>2284</a> }
-<a href=#2285 id=2285 data-nosnippet>2285</a> .into(),
-<a href=#2286 id=2286 data-nosnippet>2286</a> NestedField {
-<a href=#2287 id=2287 data-nosnippet>2287</a> id: <span class="number">2</span>,
-<a href=#2288 id=2288 data-nosnippet>2288</a> doc: <span class="prelude-val">None</span>,
-<a href=#2289 id=2289 data-nosnippet>2289</a> name: <span class="string">"b"</span>.to_string(),
-<a href=#2290 id=2290 data-nosnippet>2290</a> required: <span class="bool-val">false</span>,
-<a href=#2291 id=2291 data-nosnippet>2291</a> field_type: Box::new(Type::Primitive(PrimitiveType::String)),
-<a href=#2292 id=2292 data-nosnippet>2292</a> initial_default: <span class="prelude-val">None</span>,
-<a href=#2293 id=2293 data-nosnippet>2293</a> write_default: <span class="prelude-val">Some</span>(Literal::Primitive(PrimitiveLiteral::String(
-<a href=#2294 id=2294 data-nosnippet>2294</a> <span class="string">"514"</span>.to_string(),
-<a href=#2295 id=2295 data-nosnippet>2295</a> ))),
-<a href=#2296 id=2296 data-nosnippet>2296</a> }
-<a href=#2297 id=2297 data-nosnippet>2297</a> .into(),
-<a href=#2298 id=2298 data-nosnippet>2298</a> ]));
-<a href=#2299 id=2299 data-nosnippet>2299</a> <span class="macro">assert_eq!</span>(arrow_type, type_to_arrow_type(<span class="kw-2">&</span>iceberg_type).unwrap());
-<a href=#2300 id=2300 data-nosnippet>2300</a> }
-<a href=#2301 id=2301 data-nosnippet>2301</a>
-<a href=#2302 id=2302 data-nosnippet>2302</a> <span class="comment">// test dictionary type
-<a href=#2303 id=2303 data-nosnippet>2303</a> </span>{
-<a href=#2304 id=2304 data-nosnippet>2304</a> <span class="kw">let </span>arrow_type =
-<a href=#2305 id=2305 data-nosnippet>2305</a> DataType::Dictionary(Box::new(DataType::Int32), Box::new(DataType::Int8));
-<a href=#2306 id=2306 data-nosnippet>2306</a> <span class="kw">let </span>iceberg_type = Type::Primitive(PrimitiveType::Int);
-<a href=#2307 id=2307 data-nosnippet>2307</a> <span class="macro">assert_eq!</span>(
-<a href=#2308 id=2308 data-nosnippet>2308</a> iceberg_type,
-<a href=#2309 id=2309 data-nosnippet>2309</a> arrow_type_to_type(<span class="kw-2">&</span>arrow_type).unwrap(),
-<a href=#2310 id=2310 data-nosnippet>2310</a> <span class="string">"Expected dictionary conversion to use the contained value"
-<a href=#2311 id=2311 data-nosnippet>2311</a> </span>);
-<a href=#2312 id=2312 data-nosnippet>2312</a>
-<a href=#2313 id=2313 data-nosnippet>2313</a> <span class="kw">let </span>arrow_type =
-<a href=#2314 id=2314 data-nosnippet>2314</a> DataType::Dictionary(Box::new(DataType::Utf8), Box::new(DataType::Boolean));
-<a href=#2315 id=2315 data-nosnippet>2315</a> <span class="kw">let </span>iceberg_type = Type::Primitive(PrimitiveType::Boolean);
-<a href=#2316 id=2316 data-nosnippet>2316</a> <span class="macro">assert_eq!</span>(iceberg_type, arrow_type_to_type(<span class="kw-2">&</span>arrow_type).unwrap());
-<a href=#2317 id=2317 data-nosnippet>2317</a> }
-<a href=#2318 id=2318 data-nosnippet>2318</a> }
-<a href=#2319 id=2319 data-nosnippet>2319</a>
-<a href=#2320 id=2320 data-nosnippet>2320</a> <span class="attr">#[test]
-<a href=#2321 id=2321 data-nosnippet>2321</a> </span><span class="kw">fn </span>test_unsigned_integer_type_conversion() {
-<a href=#2322 id=2322 data-nosnippet>2322</a> <span class="kw">let </span>test_cases = <span class="macro">vec!</span>[
-<a href=#2323 id=2323 data-nosnippet>2323</a> (DataType::UInt8, PrimitiveType::Int),
-<a href=#2324 id=2324 data-nosnippet>2324</a> (DataType::UInt16, PrimitiveType::Int),
-<a href=#2325 id=2325 data-nosnippet>2325</a> (DataType::UInt32, PrimitiveType::Long),
-<a href=#2326 id=2326 data-nosnippet>2326</a> ];
-<a href=#2327 id=2327 data-nosnippet>2327</a>
-<a href=#2328 id=2328 data-nosnippet>2328</a> <span class="kw">for </span>(arrow_type, expected_iceberg_type) <span class="kw">in </span>test_cases {
-<a href=#2329 id=2329 data-nosnippet>2329</a> <span class="kw">let </span>arrow_field = Field::new(<span class="string">"test"</span>, arrow_type.clone(), <span class="bool-val">false</span>).with_metadata(
-<a href=#2330 id=2330 data-nosnippet>2330</a> HashMap::from([(PARQUET_FIELD_ID_META_KEY.to_string(), <span class="string">"1"</span>.to_string())]),
-<a href=#2331 id=2331 data-nosnippet>2331</a> );
-<a href=#2332 id=2332 data-nosnippet>2332</a> <span class="kw">let </span>arrow_schema = ArrowSchema::new(<span class="macro">vec!</span>[arrow_field]);
-<a href=#2333 id=2333 data-nosnippet>2333</a>
-<a href=#2334 id=2334 data-nosnippet>2334</a> <span class="kw">let </span>iceberg_schema = arrow_schema_to_schema(<span class="kw-2">&</span>arrow_schema).unwrap();
-<a href=#2335 id=2335 data-nosnippet>2335</a> <span class="kw">let </span>iceberg_field = iceberg_schema.as_struct().fields().first().unwrap();
-<a href=#2336 id=2336 data-nosnippet>2336</a>
-<a href=#2337 id=2337 data-nosnippet>2337</a> <span class="macro">assert!</span>(
-<a href=#2338 id=2338 data-nosnippet>2338</a> <span class="macro">matches!</span>(iceberg_field.field_type.as_ref(), Type::Primitive(t) <span class="kw">if </span><span class="kw-2">*</span>t == expected_iceberg_type),
-<a href=#2339 id=2339 data-nosnippet>2339</a> <span class="string">"Expected {arrow_type:?} to map to {expected_iceberg_type:?}"
-<a href=#2340 id=2340 data-nosnippet>2340</a> </span>);
-<a href=#2341 id=2341 data-nosnippet>2341</a> }
-<a href=#2342 id=2342 data-nosnippet>2342</a>
-<a href=#2343 id=2343 data-nosnippet>2343</a> <span class="comment">// Test UInt64 blocking
-<a href=#2344 id=2344 data-nosnippet>2344</a> </span>{
-<a href=#2345 id=2345 data-nosnippet>2345</a> <span class="kw">let </span>arrow_field = Field::new(<span class="string">"test"</span>, DataType::UInt64, <span class="bool-val">false</span>).with_metadata(
-<a href=#2346 id=2346 data-nosnippet>2346</a> HashMap::from([(PARQUET_FIELD_ID_META_KEY.to_string(), <span class="string">"1"</span>.to_string())]),
-<a href=#2347 id=2347 data-nosnippet>2347</a> );
-<a href=#2348 id=2348 data-nosnippet>2348</a> <span class="kw">let </span>arrow_schema = ArrowSchema::new(<span class="macro">vec!</span>[arrow_field]);
-<a href=#2349 id=2349 data-nosnippet>2349</a>
-<a href=#2350 id=2350 data-nosnippet>2350</a> <span class="kw">let </span>result = arrow_schema_to_schema(<span class="kw-2">&</span>arrow_schema);
-<a href=#2351 id=2351 data-nosnippet>2351</a> <span class="macro">assert!</span>(result.is_err());
-<a href=#2352 id=2352 data-nosnippet>2352</a> <span class="macro">assert!</span>(
-<a href=#2353 id=2353 data-nosnippet>2353</a> result
-<a href=#2354 id=2354 data-nosnippet>2354</a> .unwrap_err()
-<a href=#2355 id=2355 data-nosnippet>2355</a> .to_string()
-<a href=#2356 id=2356 data-nosnippet>2356</a> .contains(<span class="string">"UInt64 is not supported"</span>)
-<a href=#2357 id=2357 data-nosnippet>2357</a> );
-<a href=#2358 id=2358 data-nosnippet>2358</a> }
-<a href=#2359 id=2359 data-nosnippet>2359</a> }
-<a href=#2360 id=2360 data-nosnippet>2360</a>
-<a href=#2361 id=2361 data-nosnippet>2361</a> <span class="attr">#[test]
-<a href=#2362 id=2362 data-nosnippet>2362</a> </span><span class="kw">fn </span>test_datum_conversion() {
-<a href=#2363 id=2363 data-nosnippet>2363</a> {
-<a href=#2364 id=2364 data-nosnippet>2364</a> <span class="kw">let </span>datum = Datum::bool(<span class="bool-val">true</span>);
-<a href=#2365 id=2365 data-nosnippet>2365</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2366 id=2366 data-nosnippet>2366</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2367 id=2367 data-nosnippet>2367</a> <span class="kw">let </span>array = array.as_any().downcast_ref::<BooleanArray>().unwrap();
-<a href=#2368 id=2368 data-nosnippet>2368</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2369 id=2369 data-nosnippet>2369</a> <span class="macro">assert!</span>(array.value(<span class="number">0</span>));
-<a href=#2370 id=2370 data-nosnippet>2370</a> }
-<a href=#2371 id=2371 data-nosnippet>2371</a> {
-<a href=#2372 id=2372 data-nosnippet>2372</a> <span class="kw">let </span>datum = Datum::int(<span class="number">42</span>);
-<a href=#2373 id=2373 data-nosnippet>2373</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2374 id=2374 data-nosnippet>2374</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2375 id=2375 data-nosnippet>2375</a> <span class="kw">let </span>array = array.as_any().downcast_ref::<Int32Array>().unwrap();
-<a href=#2376 id=2376 data-nosnippet>2376</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2377 id=2377 data-nosnippet>2377</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="number">42</span>);
-<a href=#2378 id=2378 data-nosnippet>2378</a> }
-<a href=#2379 id=2379 data-nosnippet>2379</a> {
-<a href=#2380 id=2380 data-nosnippet>2380</a> <span class="kw">let </span>datum = Datum::long(<span class="number">42</span>);
-<a href=#2381 id=2381 data-nosnippet>2381</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2382 id=2382 data-nosnippet>2382</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2383 id=2383 data-nosnippet>2383</a> <span class="kw">let </span>array = array.as_any().downcast_ref::<Int64Array>().unwrap();
-<a href=#2384 id=2384 data-nosnippet>2384</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2385 id=2385 data-nosnippet>2385</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="number">42</span>);
-<a href=#2386 id=2386 data-nosnippet>2386</a> }
-<a href=#2387 id=2387 data-nosnippet>2387</a> {
-<a href=#2388 id=2388 data-nosnippet>2388</a> <span class="kw">let </span>datum = Datum::float(<span class="number">42.42_f32</span>);
-<a href=#2389 id=2389 data-nosnippet>2389</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2390 id=2390 data-nosnippet>2390</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2391 id=2391 data-nosnippet>2391</a> <span class="kw">let </span>array = array.as_any().downcast_ref::<Float32Array>().unwrap();
-<a href=#2392 id=2392 data-nosnippet>2392</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2393 id=2393 data-nosnippet>2393</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="number">42.42</span>);
-<a href=#2394 id=2394 data-nosnippet>2394</a> }
-<a href=#2395 id=2395 data-nosnippet>2395</a> {
-<a href=#2396 id=2396 data-nosnippet>2396</a> <span class="kw">let </span>datum = Datum::double(<span class="number">42.42</span>);
-<a href=#2397 id=2397 data-nosnippet>2397</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2398 id=2398 data-nosnippet>2398</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2399 id=2399 data-nosnippet>2399</a> <span class="kw">let </span>array = array.as_any().downcast_ref::<Float64Array>().unwrap();
-<a href=#2400 id=2400 data-nosnippet>2400</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2401 id=2401 data-nosnippet>2401</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="number">42.42</span>);
-<a href=#2402 id=2402 data-nosnippet>2402</a> }
-<a href=#2403 id=2403 data-nosnippet>2403</a> {
-<a href=#2404 id=2404 data-nosnippet>2404</a> <span class="kw">let </span>datum = Datum::string(<span class="string">"abc"</span>);
-<a href=#2405 id=2405 data-nosnippet>2405</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2406 id=2406 data-nosnippet>2406</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2407 id=2407 data-nosnippet>2407</a> <span class="kw">let </span>array = array.as_any().downcast_ref::<StringArray>().unwrap();
-<a href=#2408 id=2408 data-nosnippet>2408</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2409 id=2409 data-nosnippet>2409</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="string">"abc"</span>);
-<a href=#2410 id=2410 data-nosnippet>2410</a> }
-<a href=#2411 id=2411 data-nosnippet>2411</a> {
-<a href=#2412 id=2412 data-nosnippet>2412</a> <span class="kw">let </span>datum = Datum::binary(<span class="macro">vec!</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]);
-<a href=#2413 id=2413 data-nosnippet>2413</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2414 id=2414 data-nosnippet>2414</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2415 id=2415 data-nosnippet>2415</a> <span class="kw">let </span>array = array.as_any().downcast_ref::<BinaryArray>().unwrap();
-<a href=#2416 id=2416 data-nosnippet>2416</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2417 id=2417 data-nosnippet>2417</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="kw-2">&</span>[<span class="number">1</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>]);
-<a href=#2418 id=2418 data-nosnippet>2418</a> }
-<a href=#2419 id=2419 data-nosnippet>2419</a> {
-<a href=#2420 id=2420 data-nosnippet>2420</a> <span class="kw">let </span>datum = Datum::date(<span class="number">42</span>);
-<a href=#2421 id=2421 data-nosnippet>2421</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2422 id=2422 data-nosnippet>2422</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2423 id=2423 data-nosnippet>2423</a> <span class="kw">let </span>array = array.as_any().downcast_ref::<Date32Array>().unwrap();
-<a href=#2424 id=2424 data-nosnippet>2424</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2425 id=2425 data-nosnippet>2425</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="number">42</span>);
-<a href=#2426 id=2426 data-nosnippet>2426</a> }
-<a href=#2427 id=2427 data-nosnippet>2427</a> {
-<a href=#2428 id=2428 data-nosnippet>2428</a> <span class="kw">let </span>datum = Datum::timestamp_micros(<span class="number">42</span>);
-<a href=#2429 id=2429 data-nosnippet>2429</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2430 id=2430 data-nosnippet>2430</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2431 id=2431 data-nosnippet>2431</a> <span class="kw">let </span>array = array
-<a href=#2432 id=2432 data-nosnippet>2432</a> .as_any()
-<a href=#2433 id=2433 data-nosnippet>2433</a> .downcast_ref::<TimestampMicrosecondArray>()
-<a href=#2434 id=2434 data-nosnippet>2434</a> .unwrap();
-<a href=#2435 id=2435 data-nosnippet>2435</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2436 id=2436 data-nosnippet>2436</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="number">42</span>);
-<a href=#2437 id=2437 data-nosnippet>2437</a> }
-<a href=#2438 id=2438 data-nosnippet>2438</a> {
-<a href=#2439 id=2439 data-nosnippet>2439</a> <span class="kw">let </span>datum = Datum::timestamptz_micros(<span class="number">42</span>);
-<a href=#2440 id=2440 data-nosnippet>2440</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2441 id=2441 data-nosnippet>2441</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2442 id=2442 data-nosnippet>2442</a> <span class="kw">let </span>array = array
-<a href=#2443 id=2443 data-nosnippet>2443</a> .as_any()
-<a href=#2444 id=2444 data-nosnippet>2444</a> .downcast_ref::<TimestampMicrosecondArray>()
-<a href=#2445 id=2445 data-nosnippet>2445</a> .unwrap();
-<a href=#2446 id=2446 data-nosnippet>2446</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2447 id=2447 data-nosnippet>2447</a> <span class="macro">assert_eq!</span>(array.timezone(), <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>));
-<a href=#2448 id=2448 data-nosnippet>2448</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="number">42</span>);
-<a href=#2449 id=2449 data-nosnippet>2449</a> }
-<a href=#2450 id=2450 data-nosnippet>2450</a> {
-<a href=#2451 id=2451 data-nosnippet>2451</a> <span class="kw">let </span>datum = Datum::decimal_with_precision(decimal_new(<span class="number">123</span>, <span class="number">2</span>), <span class="number">30</span>).unwrap();
-<a href=#2452 id=2452 data-nosnippet>2452</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2453 id=2453 data-nosnippet>2453</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2454 id=2454 data-nosnippet>2454</a> <span class="kw">let </span>array = array.as_any().downcast_ref::<Decimal128Array>().unwrap();
-<a href=#2455 id=2455 data-nosnippet>2455</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2456 id=2456 data-nosnippet>2456</a> <span class="macro">assert_eq!</span>(array.precision(), <span class="number">30</span>);
-<a href=#2457 id=2457 data-nosnippet>2457</a> <span class="macro">assert_eq!</span>(array.scale(), <span class="number">2</span>);
-<a href=#2458 id=2458 data-nosnippet>2458</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="number">123</span>);
-<a href=#2459 id=2459 data-nosnippet>2459</a> }
-<a href=#2460 id=2460 data-nosnippet>2460</a> {
-<a href=#2461 id=2461 data-nosnippet>2461</a> <span class="kw">let </span>datum = Datum::uuid_from_str(<span class="string">"42424242-4242-4242-4242-424242424242"</span>).unwrap();
-<a href=#2462 id=2462 data-nosnippet>2462</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2463 id=2463 data-nosnippet>2463</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2464 id=2464 data-nosnippet>2464</a> <span class="kw">let </span>array = array
-<a href=#2465 id=2465 data-nosnippet>2465</a> .as_any()
-<a href=#2466 id=2466 data-nosnippet>2466</a> .downcast_ref::<FixedSizeBinaryArray>()
-<a href=#2467 id=2467 data-nosnippet>2467</a> .unwrap();
-<a href=#2468 id=2468 data-nosnippet>2468</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2469 id=2469 data-nosnippet>2469</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), [<span class="number">66u8</span>; <span class="number">16</span>]);
-<a href=#2470 id=2470 data-nosnippet>2470</a> }
-<a href=#2471 id=2471 data-nosnippet>2471</a> {
-<a href=#2472 id=2472 data-nosnippet>2472</a> <span class="kw">let </span>datum = Datum::fixed(<span class="macro">vec!</span>[<span class="number">1u8</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>]);
-<a href=#2473 id=2473 data-nosnippet>2473</a> <span class="kw">let </span>arrow_datum = get_arrow_datum(<span class="kw-2">&</span>datum).unwrap();
-<a href=#2474 id=2474 data-nosnippet>2474</a> <span class="kw">let </span>(array, is_scalar) = arrow_datum.get();
-<a href=#2475 id=2475 data-nosnippet>2475</a> <span class="kw">let </span>array = array
-<a href=#2476 id=2476 data-nosnippet>2476</a> .as_any()
-<a href=#2477 id=2477 data-nosnippet>2477</a> .downcast_ref::<FixedSizeBinaryArray>()
-<a href=#2478 id=2478 data-nosnippet>2478</a> .unwrap();
-<a href=#2479 id=2479 data-nosnippet>2479</a> <span class="macro">assert!</span>(is_scalar);
-<a href=#2480 id=2480 data-nosnippet>2480</a> <span class="macro">assert_eq!</span>(array.value_length(), <span class="number">8</span>);
-<a href=#2481 id=2481 data-nosnippet>2481</a> <span class="macro">assert_eq!</span>(array.value(<span class="number">0</span>), <span class="kw-2">&</span>[<span class="number">1u8</span>, <span class="number">2</span>, <span class="number">3</span>, <span class="number">4</span>, <span class="number">5</span>, <span class="number">6</span>, <span class="number">7</span>, <span class="number">8</span>]);
-<a href=#2482 id=2482 data-nosnippet>2482</a> }
-<a href=#2483 id=2483 data-nosnippet>2483</a> }
-<a href=#2484 id=2484 data-nosnippet>2484</a>
-<a href=#2485 id=2485 data-nosnippet>2485</a> <span class="attr">#[test]
-<a href=#2486 id=2486 data-nosnippet>2486</a> </span><span class="kw">fn </span>test_arrow_schema_to_schema_with_field_id() {
-<a href=#2487 id=2487 data-nosnippet>2487</a> <span class="comment">// Create a complex Arrow schema without field ID metadata
-<a href=#2488 id=2488 data-nosnippet>2488</a> // Including: primitives, list, nested struct, map, and nested list of structs
-<a href=#2489 id=2489 data-nosnippet>2489</a> </span><span class="kw">let </span>arrow_schema = ArrowSchema::new(<span class="macro">vec!</span>[
-<a href=#2490 id=2490 data-nosnippet>2490</a> Field::new(<span class="string">"id"</span>, DataType::Int64, <span class="bool-val">false</span>),
-<a href=#2491 id=2491 data-nosnippet>2491</a> Field::new(<span class="string">"name"</span>, DataType::Utf8, <span class="bool-val">true</span>),
-<a href=#2492 id=2492 data-nosnippet>2492</a> Field::new(<span class="string">"price"</span>, DataType::Decimal128(<span class="number">10</span>, <span class="number">2</span>), <span class="bool-val">false</span>),
-<a href=#2493 id=2493 data-nosnippet>2493</a> Field::new(
-<a href=#2494 id=2494 data-nosnippet>2494</a> <span class="string">"created_at"</span>,
-<a href=#2495 id=2495 data-nosnippet>2495</a> DataType::Timestamp(TimeUnit::Microsecond, <span class="prelude-val">Some</span>(<span class="string">"+00:00"</span>.into())),
-<a href=#2496 id=2496 data-nosnippet>2496</a> <span class="bool-val">true</span>,
-<a href=#2497 id=2497 data-nosnippet>2497</a> ),
-<a href=#2498 id=2498 data-nosnippet>2498</a> Field::new(
-<a href=#2499 id=2499 data-nosnippet>2499</a> <span class="string">"tags"</span>,
-<a href=#2500 id=2500 data-nosnippet>2500</a> DataType::List(Arc::new(Field::new(<span class="string">"item"</span>, DataType::Utf8, <span class="bool-val">true</span>))),
-<a href=#2501 id=2501 data-nosnippet>2501</a> <span class="bool-val">true</span>,
-<a href=#2502 id=2502 data-nosnippet>2502</a> ),
-<a href=#2503 id=2503 data-nosnippet>2503</a> Field::new(
-<a href=#2504 id=2504 data-nosnippet>2504</a> <span class="string">"address"</span>,
-<a href=#2505 id=2505 data-nosnippet>2505</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[
-<a href=#2506 id=2506 data-nosnippet>2506</a> Field::new(<span class="string">"street"</span>, DataType::Utf8, <span class="bool-val">true</span>),
-<a href=#2507 id=2507 data-nosnippet>2507</a> Field::new(<span class="string">"city"</span>, DataType::Utf8, <span class="bool-val">false</span>),
-<a href=#2508 id=2508 data-nosnippet>2508</a> Field::new(<span class="string">"zip"</span>, DataType::Int32, <span class="bool-val">true</span>),
-<a href=#2509 id=2509 data-nosnippet>2509</a> ])),
-<a href=#2510 id=2510 data-nosnippet>2510</a> <span class="bool-val">true</span>,
-<a href=#2511 id=2511 data-nosnippet>2511</a> ),
-<a href=#2512 id=2512 data-nosnippet>2512</a> Field::new(
-<a href=#2513 id=2513 data-nosnippet>2513</a> <span class="string">"attributes"</span>,
-<a href=#2514 id=2514 data-nosnippet>2514</a> DataType::Map(
-<a href=#2515 id=2515 data-nosnippet>2515</a> Arc::new(Field::new(
-<a href=#2516 id=2516 data-nosnippet>2516</a> DEFAULT_MAP_FIELD_NAME,
-<a href=#2517 id=2517 data-nosnippet>2517</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[
-<a href=#2518 id=2518 data-nosnippet>2518</a> Field::new(<span class="string">"key"</span>, DataType::Utf8, <span class="bool-val">false</span>),
-<a href=#2519 id=2519 data-nosnippet>2519</a> Field::new(<span class="string">"value"</span>, DataType::Utf8, <span class="bool-val">true</span>),
-<a href=#2520 id=2520 data-nosnippet>2520</a> ])),
-<a href=#2521 id=2521 data-nosnippet>2521</a> <span class="bool-val">false</span>,
-<a href=#2522 id=2522 data-nosnippet>2522</a> )),
-<a href=#2523 id=2523 data-nosnippet>2523</a> <span class="bool-val">false</span>,
-<a href=#2524 id=2524 data-nosnippet>2524</a> ),
-<a href=#2525 id=2525 data-nosnippet>2525</a> <span class="bool-val">true</span>,
-<a href=#2526 id=2526 data-nosnippet>2526</a> ),
-<a href=#2527 id=2527 data-nosnippet>2527</a> Field::new(
-<a href=#2528 id=2528 data-nosnippet>2528</a> <span class="string">"orders"</span>,
-<a href=#2529 id=2529 data-nosnippet>2529</a> DataType::List(Arc::new(Field::new(
-<a href=#2530 id=2530 data-nosnippet>2530</a> <span class="string">"element"</span>,
-<a href=#2531 id=2531 data-nosnippet>2531</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[
-<a href=#2532 id=2532 data-nosnippet>2532</a> Field::new(<span class="string">"order_id"</span>, DataType::Int64, <span class="bool-val">false</span>),
-<a href=#2533 id=2533 data-nosnippet>2533</a> Field::new(<span class="string">"amount"</span>, DataType::Float64, <span class="bool-val">false</span>),
-<a href=#2534 id=2534 data-nosnippet>2534</a> ])),
-<a href=#2535 id=2535 data-nosnippet>2535</a> <span class="bool-val">true</span>,
-<a href=#2536 id=2536 data-nosnippet>2536</a> ))),
-<a href=#2537 id=2537 data-nosnippet>2537</a> <span class="bool-val">true</span>,
-<a href=#2538 id=2538 data-nosnippet>2538</a> ),
-<a href=#2539 id=2539 data-nosnippet>2539</a> ]);
-<a href=#2540 id=2540 data-nosnippet>2540</a>
-<a href=#2541 id=2541 data-nosnippet>2541</a> <span class="kw">let </span>schema = arrow_schema_to_schema_auto_assign_ids(<span class="kw-2">&</span>arrow_schema).unwrap();
-<a href=#2542 id=2542 data-nosnippet>2542</a>
-<a href=#2543 id=2543 data-nosnippet>2543</a> <span class="comment">// Build expected schema with exact field IDs following level-order assignment:
-<a href=#2544 id=2544 data-nosnippet>2544</a> // Level 0: id=1, name=2, price=3, created_at=4, tags=5, address=6, attributes=7, orders=8
-<a href=#2545 id=2545 data-nosnippet>2545</a> // Level 1: tags.element=9, address.{street=10,city=11,zip=12}, attributes.{key=13,value=14}, orders.element=15
-<a href=#2546 id=2546 data-nosnippet>2546</a> // Level 2: orders.element.{order_id=16,amount=17}
-<a href=#2547 id=2547 data-nosnippet>2547</a> </span><span class="kw">let </span>expected = Schema::builder()
-<a href=#2548 id=2548 data-nosnippet>2548</a> .with_fields(<span class="macro">vec!</span>[
-<a href=#2549 id=2549 data-nosnippet>2549</a> NestedField::required(<span class="number">1</span>, <span class="string">"id"</span>, Type::Primitive(PrimitiveType::Long)).into(),
-<a href=#2550 id=2550 data-nosnippet>2550</a> NestedField::optional(<span class="number">2</span>, <span class="string">"name"</span>, Type::Primitive(PrimitiveType::String)).into(),
-<a href=#2551 id=2551 data-nosnippet>2551</a> NestedField::required(
-<a href=#2552 id=2552 data-nosnippet>2552</a> <span class="number">3</span>,
-<a href=#2553 id=2553 data-nosnippet>2553</a> <span class="string">"price"</span>,
-<a href=#2554 id=2554 data-nosnippet>2554</a> Type::Primitive(PrimitiveType::Decimal {
-<a href=#2555 id=2555 data-nosnippet>2555</a> precision: <span class="number">10</span>,
-<a href=#2556 id=2556 data-nosnippet>2556</a> scale: <span class="number">2</span>,
-<a href=#2557 id=2557 data-nosnippet>2557</a> }),
-<a href=#2558 id=2558 data-nosnippet>2558</a> )
-<a href=#2559 id=2559 data-nosnippet>2559</a> .into(),
-<a href=#2560 id=2560 data-nosnippet>2560</a> NestedField::optional(<span class="number">4</span>, <span class="string">"created_at"</span>, Type::Primitive(PrimitiveType::Timestamptz))
-<a href=#2561 id=2561 data-nosnippet>2561</a> .into(),
-<a href=#2562 id=2562 data-nosnippet>2562</a> NestedField::optional(
-<a href=#2563 id=2563 data-nosnippet>2563</a> <span class="number">5</span>,
-<a href=#2564 id=2564 data-nosnippet>2564</a> <span class="string">"tags"</span>,
-<a href=#2565 id=2565 data-nosnippet>2565</a> Type::List(ListType {
-<a href=#2566 id=2566 data-nosnippet>2566</a> element_field: NestedField::list_element(
-<a href=#2567 id=2567 data-nosnippet>2567</a> <span class="number">9</span>,
-<a href=#2568 id=2568 data-nosnippet>2568</a> Type::Primitive(PrimitiveType::String),
-<a href=#2569 id=2569 data-nosnippet>2569</a> <span class="bool-val">false</span>,
-<a href=#2570 id=2570 data-nosnippet>2570</a> )
-<a href=#2571 id=2571 data-nosnippet>2571</a> .into(),
-<a href=#2572 id=2572 data-nosnippet>2572</a> }),
-<a href=#2573 id=2573 data-nosnippet>2573</a> )
-<a href=#2574 id=2574 data-nosnippet>2574</a> .into(),
-<a href=#2575 id=2575 data-nosnippet>2575</a> NestedField::optional(
-<a href=#2576 id=2576 data-nosnippet>2576</a> <span class="number">6</span>,
-<a href=#2577 id=2577 data-nosnippet>2577</a> <span class="string">"address"</span>,
-<a href=#2578 id=2578 data-nosnippet>2578</a> Type::Struct(StructType::new(<span class="macro">vec!</span>[
-<a href=#2579 id=2579 data-nosnippet>2579</a> NestedField::optional(<span class="number">10</span>, <span class="string">"street"</span>, Type::Primitive(PrimitiveType::String))
-<a href=#2580 id=2580 data-nosnippet>2580</a> .into(),
-<a href=#2581 id=2581 data-nosnippet>2581</a> NestedField::required(<span class="number">11</span>, <span class="string">"city"</span>, Type::Primitive(PrimitiveType::String))
-<a href=#2582 id=2582 data-nosnippet>2582</a> .into(),
-<a href=#2583 id=2583 data-nosnippet>2583</a> NestedField::optional(<span class="number">12</span>, <span class="string">"zip"</span>, Type::Primitive(PrimitiveType::Int))
-<a href=#2584 id=2584 data-nosnippet>2584</a> .into(),
-<a href=#2585 id=2585 data-nosnippet>2585</a> ])),
-<a href=#2586 id=2586 data-nosnippet>2586</a> )
-<a href=#2587 id=2587 data-nosnippet>2587</a> .into(),
-<a href=#2588 id=2588 data-nosnippet>2588</a> NestedField::optional(
-<a href=#2589 id=2589 data-nosnippet>2589</a> <span class="number">7</span>,
-<a href=#2590 id=2590 data-nosnippet>2590</a> <span class="string">"attributes"</span>,
-<a href=#2591 id=2591 data-nosnippet>2591</a> Type::Map(MapType {
-<a href=#2592 id=2592 data-nosnippet>2592</a> key_field: NestedField::map_key_element(
-<a href=#2593 id=2593 data-nosnippet>2593</a> <span class="number">13</span>,
-<a href=#2594 id=2594 data-nosnippet>2594</a> Type::Primitive(PrimitiveType::String),
-<a href=#2595 id=2595 data-nosnippet>2595</a> )
-<a href=#2596 id=2596 data-nosnippet>2596</a> .into(),
-<a href=#2597 id=2597 data-nosnippet>2597</a> value_field: NestedField::map_value_element(
-<a href=#2598 id=2598 data-nosnippet>2598</a> <span class="number">14</span>,
-<a href=#2599 id=2599 data-nosnippet>2599</a> Type::Primitive(PrimitiveType::String),
-<a href=#2600 id=2600 data-nosnippet>2600</a> <span class="bool-val">false</span>,
-<a href=#2601 id=2601 data-nosnippet>2601</a> )
-<a href=#2602 id=2602 data-nosnippet>2602</a> .into(),
-<a href=#2603 id=2603 data-nosnippet>2603</a> }),
-<a href=#2604 id=2604 data-nosnippet>2604</a> )
-<a href=#2605 id=2605 data-nosnippet>2605</a> .into(),
-<a href=#2606 id=2606 data-nosnippet>2606</a> NestedField::optional(
-<a href=#2607 id=2607 data-nosnippet>2607</a> <span class="number">8</span>,
-<a href=#2608 id=2608 data-nosnippet>2608</a> <span class="string">"orders"</span>,
-<a href=#2609 id=2609 data-nosnippet>2609</a> Type::List(ListType {
-<a href=#2610 id=2610 data-nosnippet>2610</a> element_field: NestedField::list_element(
-<a href=#2611 id=2611 data-nosnippet>2611</a> <span class="number">15</span>,
-<a href=#2612 id=2612 data-nosnippet>2612</a> Type::Struct(StructType::new(<span class="macro">vec!</span>[
-<a href=#2613 id=2613 data-nosnippet>2613</a> NestedField::required(
-<a href=#2614 id=2614 data-nosnippet>2614</a> <span class="number">16</span>,
-<a href=#2615 id=2615 data-nosnippet>2615</a> <span class="string">"order_id"</span>,
-<a href=#2616 id=2616 data-nosnippet>2616</a> Type::Primitive(PrimitiveType::Long),
-<a href=#2617 id=2617 data-nosnippet>2617</a> )
-<a href=#2618 id=2618 data-nosnippet>2618</a> .into(),
-<a href=#2619 id=2619 data-nosnippet>2619</a> NestedField::required(
-<a href=#2620 id=2620 data-nosnippet>2620</a> <span class="number">17</span>,
-<a href=#2621 id=2621 data-nosnippet>2621</a> <span class="string">"amount"</span>,
-<a href=#2622 id=2622 data-nosnippet>2622</a> Type::Primitive(PrimitiveType::Double),
-<a href=#2623 id=2623 data-nosnippet>2623</a> )
-<a href=#2624 id=2624 data-nosnippet>2624</a> .into(),
-<a href=#2625 id=2625 data-nosnippet>2625</a> ])),
-<a href=#2626 id=2626 data-nosnippet>2626</a> <span class="bool-val">false</span>,
-<a href=#2627 id=2627 data-nosnippet>2627</a> )
-<a href=#2628 id=2628 data-nosnippet>2628</a> .into(),
-<a href=#2629 id=2629 data-nosnippet>2629</a> }),
-<a href=#2630 id=2630 data-nosnippet>2630</a> )
-<a href=#2631 id=2631 data-nosnippet>2631</a> .into(),
-<a href=#2632 id=2632 data-nosnippet>2632</a> ])
-<a href=#2633 id=2633 data-nosnippet>2633</a> .build()
-<a href=#2634 id=2634 data-nosnippet>2634</a> .unwrap();
-<a href=#2635 id=2635 data-nosnippet>2635</a>
-<a href=#2636 id=2636 data-nosnippet>2636</a> <span class="macro">pretty_assertions::assert_eq!</span>(schema, expected);
-<a href=#2637 id=2637 data-nosnippet>2637</a> <span class="macro">assert_eq!</span>(schema.highest_field_id(), <span class="number">17</span>);
-<a href=#2638 id=2638 data-nosnippet>2638</a> }
-<a href=#2639 id=2639 data-nosnippet>2639</a>
-<a href=#2640 id=2640 data-nosnippet>2640</a> <span class="kw">fn </span>decimal_byte_array_stats(min: Vec<u8>, max: Vec<u8>) -> Statistics {
-<a href=#2641 id=2641 data-nosnippet>2641</a> Statistics::byte_array(
-<a href=#2642 id=2642 data-nosnippet>2642</a> <span class="prelude-val">Some</span>(parquet::data_type::ByteArray::from(min)),
-<a href=#2643 id=2643 data-nosnippet>2643</a> <span class="prelude-val">Some</span>(parquet::data_type::ByteArray::from(max)),
-<a href=#2644 id=2644 data-nosnippet>2644</a> <span class="prelude-val">None</span>,
-<a href=#2645 id=2645 data-nosnippet>2645</a> <span class="prelude-val">Some</span>(<span class="number">0</span>),
-<a href=#2646 id=2646 data-nosnippet>2646</a> <span class="bool-val">false</span>,
-<a href=#2647 id=2647 data-nosnippet>2647</a> )
-<a href=#2648 id=2648 data-nosnippet>2648</a> }
-<a href=#2649 id=2649 data-nosnippet>2649</a>
-<a href=#2650 id=2650 data-nosnippet>2650</a> <span class="kw">fn </span>decimal_bounds(stats: <span class="kw-2">&</span>Statistics) -> <span class="prelude-ty">Result</span><(<span class="prelude-ty">Option</span><Datum>, <span class="prelude-ty">Option</span><Datum>)> {
-<a href=#2651 id=2651 data-nosnippet>2651</a> <span class="kw">let </span>ty = PrimitiveType::Decimal {
-<a href=#2652 id=2652 data-nosnippet>2652</a> precision: <span class="number">38</span>,
-<a href=#2653 id=2653 data-nosnippet>2653</a> scale: <span class="number">2</span>,
-<a href=#2654 id=2654 data-nosnippet>2654</a> };
-<a href=#2655 id=2655 data-nosnippet>2655</a> <span class="prelude-val">Ok</span>((
-<a href=#2656 id=2656 data-nosnippet>2656</a> get_parquet_stat_min_as_datum(<span class="kw-2">&</span>ty, stats)<span class="question-mark">?</span>,
-<a href=#2657 id=2657 data-nosnippet>2657</a> get_parquet_stat_max_as_datum(<span class="kw-2">&</span>ty, stats)<span class="question-mark">?</span>,
-<a href=#2658 id=2658 data-nosnippet>2658</a> ))
-<a href=#2659 id=2659 data-nosnippet>2659</a> }
-<a href=#2660 id=2660 data-nosnippet>2660</a>
-<a href=#2661 id=2661 data-nosnippet>2661</a> <span class="kw">fn </span>decimal_datum(value: i128) -> Datum {
-<a href=#2662 id=2662 data-nosnippet>2662</a> Datum::new(
-<a href=#2663 id=2663 data-nosnippet>2663</a> PrimitiveType::Decimal {
-<a href=#2664 id=2664 data-nosnippet>2664</a> precision: <span class="number">38</span>,
-<a href=#2665 id=2665 data-nosnippet>2665</a> scale: <span class="number">2</span>,
-<a href=#2666 id=2666 data-nosnippet>2666</a> },
-<a href=#2667 id=2667 data-nosnippet>2667</a> PrimitiveLiteral::Int128(value),
-<a href=#2668 id=2668 data-nosnippet>2668</a> )
-<a href=#2669 id=2669 data-nosnippet>2669</a> }
-<a href=#2670 id=2670 data-nosnippet>2670</a>
-<a href=#2671 id=2671 data-nosnippet>2671</a> <span class="attr">#[test]
-<a href=#2672 id=2672 data-nosnippet>2672</a> </span><span class="kw">fn </span>test_byte_array_decimal_stats_short_bounds() {
-<a href=#2673 id=2673 data-nosnippet>2673</a> <span class="comment">// Minimal-length big-endian two's-complement: -1234 and 1234.
-<a href=#2674 id=2674 data-nosnippet>2674</a> </span><span class="kw">let </span>stats = decimal_byte_array_stats(<span class="macro">vec!</span>[<span class="number">0xFB</span>, <span class="number">0x2E</span>], <span class="macro">vec!</span>[<span class="number">0x04</span>, <span class="number">0xD2</span>]);
-<a href=#2675 id=2675 data-nosnippet>2675</a> <span class="kw">let </span>(min, max) = decimal_bounds(<span class="kw-2">&</span>stats).unwrap();
-<a href=#2676 id=2676 data-nosnippet>2676</a> <span class="macro">assert_eq!</span>(min, <span class="prelude-val">Some</span>(decimal_datum(-<span class="number">1234</span>)));
-<a href=#2677 id=2677 data-nosnippet>2677</a> <span class="macro">assert_eq!</span>(max, <span class="prelude-val">Some</span>(decimal_datum(<span class="number">1234</span>)));
-<a href=#2678 id=2678 data-nosnippet>2678</a>
-<a href=#2679 id=2679 data-nosnippet>2679</a> <span class="comment">// Single-byte bounds: sign bit set must sign-extend, not zero-extend.
-<a href=#2680 id=2680 data-nosnippet>2680</a> </span><span class="kw">let </span>stats = decimal_byte_array_stats(<span class="macro">vec!</span>[<span class="number">0x80</span>], <span class="macro">vec!</span>[<span class="number">0x7F</span>]);
-<a href=#2681 id=2681 data-nosnippet>2681</a> <span class="kw">let </span>(min, max) = decimal_bounds(<span class="kw-2">&</span>stats).unwrap();
-<a href=#2682 id=2682 data-nosnippet>2682</a> <span class="macro">assert_eq!</span>(min, <span class="prelude-val">Some</span>(decimal_datum(-<span class="number">128</span>)));
-<a href=#2683 id=2683 data-nosnippet>2683</a> <span class="macro">assert_eq!</span>(max, <span class="prelude-val">Some</span>(decimal_datum(<span class="number">127</span>)));
-<a href=#2684 id=2684 data-nosnippet>2684</a> }
-<a href=#2685 id=2685 data-nosnippet>2685</a>
-<a href=#2686 id=2686 data-nosnippet>2686</a> <span class="attr">#[test]
-<a href=#2687 id=2687 data-nosnippet>2687</a> </span><span class="kw">fn </span>test_byte_array_decimal_stats_full_width_bounds() {
-<a href=#2688 id=2688 data-nosnippet>2688</a> <span class="kw">let </span>stats = decimal_byte_array_stats(
-<a href=#2689 id=2689 data-nosnippet>2689</a> i128::MIN.to_be_bytes().to_vec(),
-<a href=#2690 id=2690 data-nosnippet>2690</a> i128::MAX.to_be_bytes().to_vec(),
-<a href=#2691 id=2691 data-nosnippet>2691</a> );
-<a href=#2692 id=2692 data-nosnippet>2692</a> <span class="kw">let </span>(min, max) = decimal_bounds(<span class="kw-2">&</span>stats).unwrap();
-<a href=#2693 id=2693 data-nosnippet>2693</a> <span class="macro">assert_eq!</span>(min, <span class="prelude-val">Some</span>(decimal_datum(i128::MIN)));
-<a href=#2694 id=2694 data-nosnippet>2694</a> <span class="macro">assert_eq!</span>(max, <span class="prelude-val">Some</span>(decimal_datum(i128::MAX)));
-<a href=#2695 id=2695 data-nosnippet>2695</a> }
-<a href=#2696 id=2696 data-nosnippet>2696</a>
-<a href=#2697 id=2697 data-nosnippet>2697</a> <span class="attr">#[test]
-<a href=#2698 id=2698 data-nosnippet>2698</a> </span><span class="kw">fn </span>test_byte_array_decimal_stats_empty_bound_errors() {
-<a href=#2699 id=2699 data-nosnippet>2699</a> <span class="kw">let </span>stats = decimal_byte_array_stats(<span class="macro">vec!</span>[], <span class="macro">vec!</span>[<span class="number">0x01</span>]);
-<a href=#2700 id=2700 data-nosnippet>2700</a> <span class="kw">let </span>err = decimal_bounds(<span class="kw-2">&</span>stats).unwrap_err();
-<a href=#2701 id=2701 data-nosnippet>2701</a> <span class="macro">assert_eq!</span>(err.kind(), ErrorKind::DataInvalid);
-<a href=#2702 id=2702 data-nosnippet>2702</a>
-<a href=#2703 id=2703 data-nosnippet>2703</a> <span class="kw">let </span>stats = decimal_byte_array_stats(<span class="macro">vec!</span>[<span class="number">0x01</span>], <span class="macro">vec!</span>[]);
-<a href=#2704 id=2704 data-nosnippet>2704</a> <span class="kw">let </span>err = decimal_bounds(<span class="kw-2">&</span>stats).unwrap_err();
-<a href=#2705 id=2705 data-nosnippet>2705</a> <span class="macro">assert_eq!</span>(err.kind(), ErrorKind::DataInvalid);
-<a href=#2706 id=2706 data-nosnippet>2706</a> }
-<a href=#2707 id=2707 data-nosnippet>2707</a>
-<a href=#2708 id=2708 data-nosnippet>2708</a> <span class="attr">#[test]
-<a href=#2709 id=2709 data-nosnippet>2709</a> </span><span class="kw">fn </span>test_byte_array_decimal_stats_oversized_bound_errors() {
-<a href=#2710 id=2710 data-nosnippet>2710</a> <span class="kw">let </span>stats = decimal_byte_array_stats(<span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">17</span>], <span class="macro">vec!</span>[<span class="number">0x01</span>]);
-<a href=#2711 id=2711 data-nosnippet>2711</a> <span class="kw">let </span>err = decimal_bounds(<span class="kw-2">&</span>stats).unwrap_err();
-<a href=#2712 id=2712 data-nosnippet>2712</a> <span class="macro">assert_eq!</span>(err.kind(), ErrorKind::DataInvalid);
-<a href=#2713 id=2713 data-nosnippet>2713</a>
-<a href=#2714 id=2714 data-nosnippet>2714</a> <span class="kw">let </span>stats = decimal_byte_array_stats(<span class="macro">vec!</span>[<span class="number">0x01</span>], <span class="macro">vec!</span>[<span class="number">0</span>; <span class="number">17</span>]);
-<a href=#2715 id=2715 data-nosnippet>2715</a> <span class="kw">let </span>err = decimal_bounds(<span class="kw-2">&</span>stats).unwrap_err();
-<a href=#2716 id=2716 data-nosnippet>2716</a> <span class="macro">assert_eq!</span>(err.kind(), ErrorKind::DataInvalid);
-<a href=#2717 id=2717 data-nosnippet>2717</a> }
-<a href=#2718 id=2718 data-nosnippet>2718</a>
-<a href=#2719 id=2719 data-nosnippet>2719</a> <span class="doccomment">/// Every field is rebuilt without metadata, at any depth and inside any
-<a href=#2720 id=2720 data-nosnippet>2720</a> /// container. Fields are rebuilt in nesting order rather than looked up by
-<a href=#2721 id=2721 data-nosnippet>2721</a> /// name, so a path that repeats names (`a.b.a.b`) keeps each level's name
-<a href=#2722 id=2722 data-nosnippet>2722</a> /// and nullability.
-<a href=#2723 id=2723 data-nosnippet>2723</a> </span><span class="attr">#[test]
-<a href=#2724 id=2724 data-nosnippet>2724</a> </span><span class="kw">fn </span>test_strip_metadata_from_nested_schema() {
-<a href=#2725 id=2725 data-nosnippet>2725</a> <span class="comment">// The same schema, built with and without metadata on the schema and every field.
-<a href=#2726 id=2726 data-nosnippet>2726</a> </span><span class="kw">let </span>schema = |with_metadata: bool| {
-<a href=#2727 id=2727 data-nosnippet>2727</a> <span class="kw">let </span>metadata = |value: <span class="kw-2">&</span>str| {
-<a href=#2728 id=2728 data-nosnippet>2728</a> <span class="kw">if </span>with_metadata {
-<a href=#2729 id=2729 data-nosnippet>2729</a> HashMap::from([(<span class="string">"k"</span>.to_string(), value.to_string())])
-<a href=#2730 id=2730 data-nosnippet>2730</a> } <span class="kw">else </span>{
-<a href=#2731 id=2731 data-nosnippet>2731</a> HashMap::new()
-<a href=#2732 id=2732 data-nosnippet>2732</a> }
-<a href=#2733 id=2733 data-nosnippet>2733</a> };
-<a href=#2734 id=2734 data-nosnippet>2734</a> <span class="kw">let </span>field = |name: <span class="kw-2">&</span>str, ty: DataType, nullable: bool| {
-<a href=#2735 id=2735 data-nosnippet>2735</a> Field::new(name, ty, nullable).with_metadata(metadata(name))
-<a href=#2736 id=2736 data-nosnippet>2736</a> };
-<a href=#2737 id=2737 data-nosnippet>2737</a> <span class="kw">let </span>element = |ty: DataType| Arc::new(field(LIST_FIELD_NAME, ty, <span class="bool-val">false</span>));
-<a href=#2738 id=2738 data-nosnippet>2738</a> <span class="kw">let </span>ints = || DataType::List(element(DataType::Int32));
-<a href=#2739 id=2739 data-nosnippet>2739</a> <span class="kw">let </span>map = |value: DataType, sorted: bool| {
-<a href=#2740 id=2740 data-nosnippet>2740</a> <span class="kw">let </span>entries = Fields::from(<span class="macro">vec!</span>[
-<a href=#2741 id=2741 data-nosnippet>2741</a> field(MAP_KEY_FIELD_NAME, DataType::Utf8, <span class="bool-val">false</span>),
-<a href=#2742 id=2742 data-nosnippet>2742</a> field(MAP_VALUE_FIELD_NAME, value, <span class="bool-val">true</span>),
-<a href=#2743 id=2743 data-nosnippet>2743</a> ]);
-<a href=#2744 id=2744 data-nosnippet>2744</a> <span class="kw">let </span>entries = field(DEFAULT_MAP_FIELD_NAME, DataType::Struct(entries), <span class="bool-val">false</span>);
-<a href=#2745 id=2745 data-nosnippet>2745</a> DataType::Map(Arc::new(entries), sorted)
-<a href=#2746 id=2746 data-nosnippet>2746</a> };
-<a href=#2747 id=2747 data-nosnippet>2747</a> <span class="kw">let </span>struct_of = |fields: Vec<Field>| DataType::Struct(Fields::from(fields));
-<a href=#2748 id=2748 data-nosnippet>2748</a>
-<a href=#2749 id=2749 data-nosnippet>2749</a> <span class="kw">let </span>a_b_a_b = struct_of(<span class="macro">vec!</span>[field(
-<a href=#2750 id=2750 data-nosnippet>2750</a> <span class="string">"b"</span>,
-<a href=#2751 id=2751 data-nosnippet>2751</a> struct_of(<span class="macro">vec!</span>[field(
-<a href=#2752 id=2752 data-nosnippet>2752</a> <span class="string">"a"</span>,
-<a href=#2753 id=2753 data-nosnippet>2753</a> struct_of(<span class="macro">vec!</span>[field(<span class="string">"b"</span>, DataType::Int32, <span class="bool-val">true</span>)]),
-<a href=#2754 id=2754 data-nosnippet>2754</a> <span class="bool-val">false</span>,
-<a href=#2755 id=2755 data-nosnippet>2755</a> )]),
-<a href=#2756 id=2756 data-nosnippet>2756</a> <span class="bool-val">false</span>,
-<a href=#2757 id=2757 data-nosnippet>2757</a> )]);
-<a href=#2758 id=2758 data-nosnippet>2758</a> ArrowSchema::new(<span class="macro">vec!</span>[
-<a href=#2759 id=2759 data-nosnippet>2759</a> field(<span class="string">"list"</span>, ints(), <span class="bool-val">true</span>),
-<a href=#2760 id=2760 data-nosnippet>2760</a> field(
-<a href=#2761 id=2761 data-nosnippet>2761</a> <span class="string">"large_list"</span>,
-<a href=#2762 id=2762 data-nosnippet>2762</a> DataType::LargeList(element(DataType::Int32)),
-<a href=#2763 id=2763 data-nosnippet>2763</a> <span class="bool-val">false</span>,
-<a href=#2764 id=2764 data-nosnippet>2764</a> ),
-<a href=#2765 id=2765 data-nosnippet>2765</a> field(
-<a href=#2766 id=2766 data-nosnippet>2766</a> <span class="string">"fixed_list"</span>,
-<a href=#2767 id=2767 data-nosnippet>2767</a> DataType::FixedSizeList(element(DataType::Int32), <span class="number">2</span>),
-<a href=#2768 id=2768 data-nosnippet>2768</a> <span class="bool-val">true</span>,
-<a href=#2769 id=2769 data-nosnippet>2769</a> ),
-<a href=#2770 id=2770 data-nosnippet>2770</a> field(<span class="string">"list_of_list"</span>, DataType::List(element(ints())), <span class="bool-val">false</span>),
-<a href=#2771 id=2771 data-nosnippet>2771</a> field(<span class="string">"sorted_map"</span>, map(ints(), <span class="bool-val">true</span>), <span class="bool-val">false</span>),
-<a href=#2772 id=2772 data-nosnippet>2772</a> field(
-<a href=#2773 id=2773 data-nosnippet>2773</a> <span class="string">"map_of_struct"</span>,
-<a href=#2774 id=2774 data-nosnippet>2774</a> map(
-<a href=#2775 id=2775 data-nosnippet>2775</a> struct_of(<span class="macro">vec!</span>[
-<a href=#2776 id=2776 data-nosnippet>2776</a> field(<span class="string">"a"</span>, DataType::Int32, <span class="bool-val">true</span>),
-<a href=#2777 id=2777 data-nosnippet>2777</a> field(<span class="string">"b"</span>, ints(), <span class="bool-val">false</span>),
-<a href=#2778 id=2778 data-nosnippet>2778</a> ]),
-<a href=#2779 id=2779 data-nosnippet>2779</a> <span class="bool-val">false</span>,
-<a href=#2780 id=2780 data-nosnippet>2780</a> ),
-<a href=#2781 id=2781 data-nosnippet>2781</a> <span class="bool-val">true</span>,
-<a href=#2782 id=2782 data-nosnippet>2782</a> ),
-<a href=#2783 id=2783 data-nosnippet>2783</a> field(
-<a href=#2784 id=2784 data-nosnippet>2784</a> <span class="string">"list_of_struct"</span>,
-<a href=#2785 id=2785 data-nosnippet>2785</a> DataType::List(element(struct_of(<span class="macro">vec!</span>[field(
-<a href=#2786 id=2786 data-nosnippet>2786</a> <span class="string">"m"</span>,
-<a href=#2787 id=2787 data-nosnippet>2787</a> map(ints(), <span class="bool-val">false</span>),
-<a href=#2788 id=2788 data-nosnippet>2788</a> <span class="bool-val">true</span>,
-<a href=#2789 id=2789 data-nosnippet>2789</a> )]))),
-<a href=#2790 id=2790 data-nosnippet>2790</a> <span class="bool-val">true</span>,
-<a href=#2791 id=2791 data-nosnippet>2791</a> ),
-<a href=#2792 id=2792 data-nosnippet>2792</a> field(<span class="string">"a"</span>, a_b_a_b, <span class="bool-val">true</span>),
-<a href=#2793 id=2793 data-nosnippet>2793</a> ])
-<a href=#2794 id=2794 data-nosnippet>2794</a> .with_metadata(metadata(<span class="string">"schema"</span>))
-<a href=#2795 id=2795 data-nosnippet>2795</a> };
-<a href=#2796 id=2796 data-nosnippet>2796</a>
-<a href=#2797 id=2797 data-nosnippet>2797</a> <span class="kw">let </span>(input, expected) = (schema(<span class="bool-val">true</span>), schema(<span class="bool-val">false</span>));
-<a href=#2798 id=2798 data-nosnippet>2798</a> <span class="comment">// Otherwise a builder that stopped adding metadata would pass trivially.
-<a href=#2799 id=2799 data-nosnippet>2799</a> </span><span class="macro">assert_ne!</span>(input, expected);
-<a href=#2800 id=2800 data-nosnippet>2800</a> <span class="macro">pretty_assertions::assert_eq!</span>(strip_metadata_from_schema(<span class="kw-2">&</span>input).unwrap(), expected);
-<a href=#2801 id=2801 data-nosnippet>2801</a> }
+<a href=#2210 id=2210 data-nosnippet>2210</a> <span class="macro">assert_eq!</span>(field.extension_type_name(), <span class="prelude-val">Some</span>(UuidExtensionType::NAME));
+<a href=#2211 id=2211 data-nosnippet>2211</a> <span class="comment">// Attaching the extension type must not clobber the Iceberg field id.
+<a href=#2212 id=2212 data-nosnippet>2212</a> </span><span class="macro">assert_eq!</span>(
+<a href=#2213 id=2213 data-nosnippet>2213</a> field.metadata().get(PARQUET_FIELD_ID_META_KEY),
+<a href=#2214 id=2214 data-nosnippet>2214</a> <span class="prelude-val">Some</span>(<span class="kw-2">&</span><span class="string">"1"</span>.to_string())
+<a href=#2215 id=2215 data-nosnippet>2215</a> );
+<a href=#2216 id=2216 data-nosnippet>2216</a> <span class="macro">assert_eq!</span>(<span class="kw-2">*</span>field.data_type(), DataType::FixedSizeBinary(<span class="number">16</span>));
+<a href=#2217 id=2217 data-nosnippet>2217</a> }
+<a href=#2218 id=2218 data-nosnippet>2218</a>
+<a href=#2219 id=2219 data-nosnippet>2219</a> <span class="attr">#[test]
+<a href=#2220 id=2220 data-nosnippet>2220</a> </span><span class="kw">fn </span>test_variant_nested_in_list_and_map_carries_arrow_extension_type() {
+<a href=#2221 id=2221 data-nosnippet>2221</a> <span class="comment">// A variant nested in a list element or map value keeps the arrow.parquet.variant
+<a href=#2222 id=2222 data-nosnippet>2222</a> // extension type. Regression guard: the list converter must not overwrite the
+<a href=#2223 id=2223 data-nosnippet>2223</a> // element field's metadata (which would drop the extension type).
+<a href=#2224 id=2224 data-nosnippet>2224</a> </span><span class="kw">let </span>schema = Schema::builder()
+<a href=#2225 id=2225 data-nosnippet>2225</a> .with_fields(<span class="macro">vec!</span>[
+<a href=#2226 id=2226 data-nosnippet>2226</a> NestedField::optional(
+<a href=#2227 id=2227 data-nosnippet>2227</a> <span class="number">1</span>,
+<a href=#2228 id=2228 data-nosnippet>2228</a> <span class="string">"l"</span>,
+<a href=#2229 id=2229 data-nosnippet>2229</a> Type::List(ListType::new(
+<a href=#2230 id=2230 data-nosnippet>2230</a> NestedField::optional(<span class="number">2</span>, <span class="string">"element"</span>, Type::Variant(VariantType)).into(),
+<a href=#2231 id=2231 data-nosnippet>2231</a> )),
+<a href=#2232 id=2232 data-nosnippet>2232</a> )
+<a href=#2233 id=2233 data-nosnippet>2233</a> .into(),
+<a href=#2234 id=2234 data-nosnippet>2234</a> NestedField::optional(
+<a href=#2235 id=2235 data-nosnippet>2235</a> <span class="number">3</span>,
+<a href=#2236 id=2236 data-nosnippet>2236</a> <span class="string">"m"</span>,
+<a href=#2237 id=2237 data-nosnippet>2237</a> Type::Map(MapType::new(
+<a href=#2238 id=2238 data-nosnippet>2238</a> NestedField::map_key_element(<span class="number">4</span>, Type::Primitive(PrimitiveType::String))
+<a href=#2239 id=2239 data-nosnippet>2239</a> .into(),
+<a href=#2240 id=2240 data-nosnippet>2240</a> NestedField::map_value_element(<span class="number">5</span>, Type::Variant(VariantType), <span class="bool-val">false</span>).into(),
+<a href=#2241 id=2241 data-nosnippet>2241</a> )),
+<a href=#2242 id=2242 data-nosnippet>2242</a> )
+<a href=#2243 id=2243 data-nosnippet>2243</a> .into(),
+<a href=#2244 id=2244 data-nosnippet>2244</a> ])
+<a href=#2245 id=2245 data-nosnippet>2245</a> .build()
+<a href=#2246 id=2246 data-nosnippet>2246</a> .unwrap();
+<a href=#2247 id=2247 data-nosnippet>2247</a>
+<a href=#2248 id=2248 data-nosnippet>2248</a> <span class="kw">let </span>arrow_schema = schema_to_arrow_schema(<span class="kw-2">&</span>schema).unwrap();
+<a href=#2249 id=2249 data-nosnippet>2249</a>
+<a href=#2250 id=2250 data-nosnippet>2250</a> <span class="kw">let </span>DataType::List(element) = arrow_schema.field_with_name(<span class="string">"l"</span>).unwrap().data_type() <span class="kw">else </span>{
+<a href=#2251 id=2251 data-nosnippet>2251</a> <span class="macro">panic!</span>(<span class="string">"expected a list"</span>);
+<a href=#2252 id=2252 data-nosnippet>2252</a> };
+<a href=#2253 id=2253 data-nosnippet>2253</a> <span class="macro">assert_eq!</span>(element.extension_type_name(), <span class="prelude-val">Some</span>(<span class="string">"arrow.parquet.variant"</span>));
+<a href=#2254 id=2254 data-nosnippet>2254</a>
+<a href=#2255 id=2255 data-nosnippet>2255</a> <span class="kw">let </span>DataType::Map(entries, <span class="kw">_</span>) = arrow_schema.field_with_name(<span class="string">"m"</span>).unwrap().data_type()
+<a href=#2256 id=2256 data-nosnippet>2256</a> <span class="kw">else </span>{
+<a href=#2257 id=2257 data-nosnippet>2257</a> <span class="macro">panic!</span>(<span class="string">"expected a map"</span>);
+<a href=#2258 id=2258 data-nosnippet>2258</a> };
+<a href=#2259 id=2259 data-nosnippet>2259</a> <span class="kw">let </span>DataType::Struct(kv) = entries.data_type() <span class="kw">else </span>{
+<a href=#2260 id=2260 data-nosnippet>2260</a> <span class="macro">panic!</span>(<span class="string">"expected a key_value struct"</span>);
+<a href=#2261 id=2261 data-nosnippet>2261</a> };
+<a href=#2262 id=2262 data-nosnippet>2262</a> <span class="kw">let </span>value = kv.iter().find(|f| f.name() == <span class="string">"value"</span>).unwrap();
+<a href=#2263 id=2263 data-nosnippet>2263</a> <span class="macro">assert_eq!</span>(value.extension_type_name(), <span class="prelude-val">Some</span>(<span class="string">"arrow.parquet.variant"</span>));
+<a href=#2264 id=2264 data-nosnippet>2264</a> }
+<a href=#2265 id=2265 data-nosnippet>2265</a>
+<a href=#2266 id=2266 data-nosnippet>2266</a> <span class="doccomment">/// The unshredded Arrow storage of a variant: `metadata` (required) + `value`
+<a href=#2267 id=2267 data-nosnippet>2267</a> /// (nullable) binary, with no field ids on the sub-fields.
+<a href=#2268 id=2268 data-nosnippet>2268</a> </span><span class="kw">fn </span>variant_storage() -> DataType {
+<a href=#2269 id=2269 data-nosnippet>2269</a> DataType::Struct(Fields::from(<span class="macro">vec!</span>[
+<a href=#2270 id=2270 data-nosnippet>2270</a> Field::new(<span class="string">"metadata"</span>, DataType::Binary, <span class="bool-val">false</span>),
+<a href=#2271 id=2271 data-nosnippet>2271</a> Field::new(<span class="string">"value"</span>, DataType::Binary, <span class="bool-val">true</span>),
+<a href=#2272 id=2272 data-nosnippet>2272</a> ]))
+<a href=#2273 id=2273 data-nosnippet>2273</a> }
+<a href=#2274 id=2274 data-nosnippet>2274</a>
+<a href=#2275 id=2275 data-nosnippet>2275</a> <span class="attr">#[test]
+<a href=#2276 id=2276 data-nosnippet>2276</a> </span><span class="kw">fn </span>test_variant_arrow_field_folds_to_iceberg_variant() {
+<a href=#2277 id=2277 data-nosnippet>2277</a> <span class="comment">// A field tagged with the arrow.parquet.variant extension is folded into an
+<a href=#2278 id=2278 data-nosnippet>2278</a> // atomic Type::Variant; its storage sub-fields (which carry no field id) are
+<a href=#2279 id=2279 data-nosnippet>2279</a> // never descended into.
+<a href=#2280 id=2280 data-nosnippet>2280</a> </span><span class="kw">let </span>field = simple_field(<span class="string">"v"</span>, variant_storage(), <span class="bool-val">true</span>, <span class="string">"1"</span>)
+<a href=#2281 id=2281 data-nosnippet>2281</a> .with_extension_type(VariantExtensionType);
+<a href=#2282 id=2282 data-nosnippet>2282</a> <span class="kw">let </span>arrow_schema = ArrowSchema::new(<span class="macro">vec!</span>[field]);
+<a href=#2283 id=2283 data-nosnippet>2283</a>
+<a href=#2284 id=2284 data-nosnippet>2284</a> <span class="kw">let </span>converted = arrow_schema_to_schema(<span class="kw-2">&</span>arrow_schema).unwrap();
+<a href=#2285 id=2285 data-nosnippet>2285</a> <span class="kw">let </span>expected = Schema::builder()
+<a href=#2286 id=2286 data-nosnippet>2286</a> .with_fields(<span class="macro">vec!</span>[
+<a href=#2287 id=2287 data-nosnippet>2287</a> NestedField::optional(<span class="number">1</span>, <span class="string">"v"</span>, Type::Variant(VariantType)).into(),
+<a href=#2288 id=2288 data-nosnippet>2288</a> ])
+<a href=#2289 id=2289 data-nosnippet>2289</a> .build()
+<a href=#2290 id=2290 data-nosnippet>2290</a> .unwrap();
+<a href=#2291 id=2291 data-nosnippet>2291</a> <span class="macro">pretty_assertions::assert_eq!</span>(converted, expected);
+<a href=#2292 id=2292 data-nosnippet>2292</a> }
+<a href=#2293 id=2293 data-nosnippet>2293</a>
+<a href=#2294 id=2294 data-nosnippet>2294</a> <span class="attr">#[test]
+<a href=#2295 id=2295 data-nosnippet>2295</a> </span><span class="kw">fn </span>test_variant_schema_round_trips() {
+<a href=#2296 id=2296 data-nosnippet>2296</a> <span class="comment">// Iceberg -> Arrow -> Iceberg is the identity for variants at every position:
+<a href=#2297 id=2297 data-nosnippet>2297</a> // top-level, nested in a struct, as a list element, and as a map value.
+<a href=#2298 id=2298 data-nosnippet>2298</a> </span><span class="kw">let </span>schema = Schema::builder()
+<a href=#2299 id=2299 data-nosnippet>2299</a> .with_fields(<span class="macro">vec!</span>[
+<a href=#2300 id=2300 data-nosnippet>2300</a> NestedField::optional(<span class="number">1</span>, <span class="string">"v"</span>, Type::Variant(VariantType)).into(),
+<a href=#2301 id=2301 data-nosnippet>2301</a> NestedField::optional(
+<a href=#2302 id=2302 data-nosnippet>2302</a> <span class="number">2</span>,
+<a href=#2303 id=2303 data-nosnippet>2303</a> <span class="string">"s"</span>,
+<a href=#2304 id=2304 data-nosnippet>2304</a> Type::Struct(StructType::new(<span class="macro">vec!</span>[
+<a href=#2305 id=2305 data-nosnippet>2305</a> NestedField::optional(<span class="number">3</span>, <span class="string">"sv"</span>, Type::Variant(VariantType)).into(),
+<a href=#2306 id=2306 data-nosnippet>2306</a> ])),
+<a href=#2307 id=2307 data-nosnippet>2307</a> )
+<a href=#2308 id=2308 data-nosnippet>2308</a> .into(),
+<a href=#2309 id=2309 data-nosnippet>2309</a> NestedField::optional(
+<a href=#2310 id=2310 data-nosnippet>2310</a> <span class="number">4</span>,
+<a href=#2311 id=2311 data-nosnippet>2311</a> <span class="string">"l"</span>,
+<a href=#2312 id=2312 data-nosnippet>2312</a> Type::List(ListType::new(
+<a href=#2313 id=2313 data-nosnippet>2313</a> NestedField::optional(<span class="number">5</span>, <span class="string">"element"</span>, Type::Variant(VariantType)).into(),
+<a href=#2314 id=2314 data-nosnippet>2314</a> )),
+<a href=#2315 id=2315 data-nosnippet>2315</a> )
... 1607 lines suppressed ...